0

I'm really new to Django and I want to teach myself by making a simple note. I maked a simple form for creating a new note but I don't know how to make this just for the user is logged in. What I mean is that I want the user field from the creationNoteForm to be removed and the note to be sumbitted automatically for the person who is logged in. Hope that I was clear enough.

Here is my "view.py":

from django.shortcuts import render, redirect

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from .forms import CreateUserForm, CreateNoteForm


from django.contrib import messages
from django.contrib.auth.decorators import login_required


from .models import *

# Create your views here.
def loginPage(request):
    if request.method == 'POST': 
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('home')
        else: 
            messages.info(request, 'Username or pasword is incorrect')

    context = {}

    return render(request, 'accounts/login.html', context)

def registerPage(request): 
    form = CreateUserForm()

    if request.method == 'POST': 
        form = CreateUserForm(request.POST)
        if form.is_valid(): 
            form.save()
            user = form.cleaned_data.get('username')
            messages.success(request, 'Account was created for '+ user)
            return redirect('home')

    context = {'form': form}

    return render(request, 'accounts/register.html', context)

def logoutUser(request):
    logout(request)
    return redirect('login')

@login_required(login_url='login')
def home(request): 
    if request.user.is_authenticated:
        username = request.POST.get('username')
        context = {'username': username}

        return render(request, 'accounts/home.html', context)

@login_required(login_url='login')
def notes(request):
    username = None 
    if request.user.is_authenticated:
        username = request.user.username
        user_id = request.user.pk

    user_notes = Note.objects.filter(user=user_id)

    context = {
        'user_notes': user_notes,
        'username': username,
        #'user_id' : user_id,
    }

    return render(request, 'accounts/notes.html', context)

def createNote(request): 
    # username = request.user.username
    # user_id = request.user.pk

    # user_notes = Note.objects.filter(user=user_id)


    form = CreateNoteForm()

    if request.method == 'POST': 
        form = CreateNoteForm(request.POST)
        if form.is_valid(): 
            form.save()
            return redirect('notes')
    context = {
        'form': form,
    }

    return render(request, 'accounts/create_note.html', context)

def deleteNote(request, pk):
    note = Note.objects.get(id=pk)

    if request.method == 'POST': 
        note.delete()
        return redirect('notes')

    context = {'note': note}

    return render(request, 'accounts/delete.html', context)

def updateNote(request, pk): 
    note = Note.objects.get(id=pk)  

    form = CreateNoteForm(instance=note)

    if request.method == 'POST': 
        form = CreateNoteForm(request.POST, instance=note)
        if form.is_valid(): 
            form.save()
            return redirect('notes')

    context = {'form': form, 'note': note}

    return render(request, 'accounts/update.html', context)

"forms.py":

from django.forms import ModelForm
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User 
from .models import Note

class CreateUserForm(UserCreationForm):
    class Meta: 
        model = User
        fields = ['username', 'email', 'password1', 'password2']

class CreateNoteForm(forms.ModelForm): 
    class Meta: 
        model = Note
        fields = ['user', 'title', 'text']

and "models.py" just in case:

from django.db import models
from django.contrib.auth.models import User

class Note(models.Model): 
    #user = models.ForeignKey(Person, null=True, on_delete=models.SET_NULL)
    user = models.ForeignKey(User, null=True,on_delete=models.SET_NULL)
    title = models.CharField(max_length=200, null=True)
    text = models.TextField()
    date_created = models.DateTimeField(auto_now_add=True)

    def __str__(self): 
        return self.title

Thank you and sorry I am a noob!

  • 1
    If you are using the `@require_login` decorators, you shouldn't need to do `if request.user.is_authenticated:` – GTBebbo Apr 15 '20 at 18:11
  • Thank you! And do you know how to remove my user field from form ? – Codrut Ursache Apr 15 '20 at 18:17
  • 1
    I found this, does this answer your question? [How do I set user field in form to the currently logged in user?](https://stackoverflow.com/questions/18246326/how-do-i-set-user-field-in-form-to-the-currently-logged-in-user) – GTBebbo Apr 15 '20 at 18:28
  • Pretty much! I think I have to change all my create, delete and update views but thank you very much! – Codrut Ursache Apr 15 '20 at 18:39

0 Answers0