#python #django
Вопрос:
Работа над простым в использовании приложением с использованием Django 3.2. В данный момент я работаю над отношениями «один к одному», в которых у каждого конкретного пользователя есть свои собственные данные(какие задачи необходимо выполнить в данном случае). Я сделал это, создав поле в models.py user = models.ForeignKey(User, on_delete=CASCADE, null=True)
Проблема в том, что когда я добавляю задачу в домашний шаблон, она не отображается.
models.py
from django.db import models from django.contrib.auth.models import User from django.db.models.deletion import CASCADE # Create your models here. class user_active(models.Model): content = models.CharField(max_length=200, null=True) created = models.DateTimeField(auto_now_add=True) name = models.CharField(max_length=200, null=True) email = models.CharField(max_length=200, null=True) user = models.ForeignKey(User, on_delete=CASCADE, null=True) def __str__(self): return self.content
forms.py
from django import forms from django.forms import ModelForm, fields from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from .models import user_active class CreateUserForm(UserCreationForm): class Meta: model = User fields = ['username', 'first_name', 'last_name', 'email', 'password1', 'password2']
home.html
lt;divgt; lt;form class="felx" action="add_content/" method="POST"gt; {% csrf_token %} lt;input class="form-control me-2" type="text" name="content" placeholder="Hey"gt; lt;button id="add-btn" class="button" type="submit"gt;Addlt;/buttongt; lt;/formgt; lt;tablegt; lt;theadgt; {% for all_item in all_items %} lt;trgt; lt;tdgt;{{ all_item.content }}lt;/tdgt; lt;/trgt; {% endfor %} lt;/theadgt; lt;/tablegt; lt;a href="{% url 'demo1:login' %}"gt;Logoutlt;/agt; {% if request.user.is_authenticated %} lt;pgt;Hello {{request.user}}lt;/pgt; {% endif %} lt;/divgt;
views.py
from django.shortcuts import render, redirect from django.http.response import HttpResponse from django.utils import timezone from django.contrib.auth import authenticate, login, logout from django.contrib.auth.decorators import login_required # from demo1.forms import CeateUserForm1 from .models import * from .models import __str__ from .forms import CreateUserForm def home(request): user = request.user all_items = user_active.objects.filter(user=user).order_by("created") context = {'all_items': all_items} return render(request, 'html/home.html', context) def add_content(request): user = request.user current_date = timezone.now() newItem = user_active(content=request.POST.get('content')) print('New item:', newItem) newItem.save() return redirect('/') def login_user(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('/') return render(request, 'html/login.html') def logoutUser(request): logout(request) return redirect('login/') def register_user(request): form = CreateUserForm() if request.method == 'POST': form = CreateUserForm(request.POST) if form.is_valid(): user = form.save(commit=False) user.save() user = authenticate(request, username=user.username, password=request.POST.get('password1')) if user is not None: login(request, user) return redirect('/') context = {'form':form} return render(request, 'html/register.html', context)
Также, чтобы проверить это, я печатаю новый элемент, чтобы увидеть, добавлены ли в него какие-либо данные, и да, он показывает терминалу новый элемент, но не в шаблоне. Не уверен, почему это ошибка. Буду признателен за любой ответ или предложения Спасибо1
Ответ №1:
В представлении add_content вы не назначаете пользователя объекту user_active при создании нового элемента.
def add_content(request): user = request.user current_date = timezone.now() #here you need to assign the user newItem = user_active(user=user, content=request.POST.get('content')) print('New item:', newItem) newItem.save() return redirect('/')
Комментарии:
1. Как я могу его назначить? @ягус
2. @Zani123, Как я уже писал?