首页 > 解决方案 > Django CRUD - 创建和更新视图不​​起作用

问题描述

我对 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)

“表格.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

谢谢,对不起,我是菜鸟!

标签: djangodjango-formscrud

解决方案


推荐阅读