Django表单-提交数据无效

时间:2020-04-10 12:04:36

标签: django django-forms django-views crud

我真的是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)

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']

和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 %}

问题是提交数据时未添加新注释。而且,如果有人对结构化我的观点或使这个应用程序更好有其他建议,我很高兴阅读它们并学习改进项目的新方法。抱歉,很长的帖子。我真的是菜鸟

0 个答案:

没有答案