get_user_model не возвращает значение - PullRequest
0 голосов
/ 19 марта 2020

как мой первый проект в 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>

Заранее благодарю за любую помощь!

1 Ответ

0 голосов
/ 19 марта 2020

Ваш шаблон формы включает в себя только поле заголовка, вам необходимо либо добавить поле add_by к этой форме, либо добавить его в обработку представления

{{ form.added_by }}

или

if request.method == 'POST':
    form = TaskForm({**request.POST, **{"added_by": request.user}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...