Django формы - отправка данных не работает - PullRequest
0 голосов
/ 10 апреля 2020

Я действительно новичок в 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 %}

Проблема в том, что новая заметка не добавляется при отправке данных. А также, если у кого-то есть другие предложения по структурированию моих взглядов или улучшению этого приложения, я с удовольствием их прочту и изучу новые способы улучшения своего проекта. Извините за длинный пост. Я действительно нуб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...