首页 > 解决方案 > Django 表单 - 提交数据不起作用

问题描述

我对 Django 很陌生,我想自学做一个简单的笔记。但我不明白 django 表单是如何工作的。当我可以显示用户的笔记时,我制作了简单的模板,现在我正在尝试制作一个视图,当用户可以使用简单的表单向帐户添加新笔记时。

这是我的views.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)


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 = {'user_notes': user_notes, 'form': form}

    return render(request, 'accounts/create_note.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']

和 create_note.html:

{% extends 'accounts/main.html' %}
{% load static %}
{% block content %}

<br>
<br>
<div class="container">
    <div class="card text-white bg-dark mb-3">
        <div class="container">
            <form action="{% url 'notes' %}" method="POST">
                <div class="card-body">
                    {% csrf_token %}
                    {{form}}
                    <input type="Submit" name="Submit">
                </div> 
            </form>
        </div>
    </div>
</div>

{% endblock %}

问题是我提交数据时没有添加新注释。此外,如果有人对构建我的观点或改进这个应用程序有其他建议,我很高兴阅读它们并学习改进我的项目的新方法。对不起,长篇大论。我真的是菜鸟。

标签: djangodjango-formsdjango-viewscrud

解决方案


推荐阅读