как мой первый проект в Django Я создаю приложение todo, которое позволяет людям входить в систему и видеть свои собственные задачи, которые они создали. Для этого мне нужно сохранить информацию об авторе в данных одной задачи.
Из того, что я узнал, читая документацию и делая много поисков в Google, текущий подход заключается в использовании функции get_user_model из django .contrib.auth.
Проблема в том, что всякий раз, когда я пытаюсь использовать его в моей модели, кажется, что он не получает имя пользователя от текущего пользователя. При выводе ошибок form.erers на мою консоль вывод:
<ul class="errorlist"><li>added_by<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
Похоже, что get_user_model не возвращает никакого значения. Кто-нибудь может порекомендовать лучший подход для меня, чтобы сделать это? Или есть что-то очевидное, что я пропустил?
Вот фрагменты кода:
models.py
from django.db import models
from django.contrib.auth import get_user_model
class Task(models.Model):
title = models.CharField(max_length=35)
completed = models.BooleanField(default=False)
created_date = models.DateTimeField(auto_now_add=True)
added_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
def __str__(self):
return self.title
forms.py
from django import forms
from .models import *
class TaskForm(forms.ModelForm):
class Meta:
model = Task
fields = '__all__'
widgets = {
'title': forms.TextInput(attrs={'class': 'new_task_text', 'placeholder': 'Add new task'}),
}
views.py
@login_required
def list_homepage(request):
tasks = Task.objects.all()
form = TaskForm()
if request.method == 'POST':
form = TaskForm(request.POST)
if form.is_valid():
form.save()
print(form.cleaned_data)
else:
print(form.errors)
return redirect('/list/home')
context = {
'page_title': 'Todo list',
'tasks': tasks,
'form': form,
}
return render(request, 'tasks/list.html', context)
Форма в шаблоне:
<form method="POST", action="#"> {% csrf_token %}
{{ form.title }}
<input class="submit" type="submit", value="Create task">
</form>
Заранее благодарю за любую помощь!