Django CRUD - создание и обновление представления не работает - PullRequest
0 голосов
/ 15 апреля 2020

Я действительно новичок в Django, и я хочу научить себя, делая простую заметку. Я создал простую форму для создания новой заметки, но я не знаю, как сделать это только для пользователя, вошедшего в систему. Я имею в виду, что я хочу, чтобы пользовательское поле из creationNoteForm было удалено, а примечание было добавлено автоматически для человека, который вошел в систему. Надеюсь, что мне было достаточно ясно.

Вот мой "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']

и "models.py" на всякий случай:

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

Спасибо и извините, я нуб!

1 Ответ

0 голосов
/ 15 апреля 2020

Для создания пользователя Импортируйте get_user_model

from django.contrib.auth import authenticate, get_user_model

Затем над страницей регистрации определите User = get_user_model

Затем после проверки формы проверяет

new_user = User.objects.create_user(username, password) \

new_user.save()

Я считаю, что с этой регистрацией должно получиться

...