Как связать логин пользователя с постом, который он создал? - PullRequest
0 голосов
/ 26 февраля 2020

Я учусь django, и я сделал учебник на сайте django. Я думал, что смогу связать пользователя с опросом, который он создал, но я борюсь с этим. Когда я вошел в систему и создал опрос, я не вижу имени пользователя. В столбце базы данных author_id имеет значение null. Буду признателен за любую помощь.

Вот мой код

from django.db import models
from django.utils import timezone
import datetime
from django.contrib import auth
# Create your models here.

User = auth.get_user_model()

class Question(models.Model):
   question_text = models.CharField(max_length=200)
   author = models.ForeignKey(User, on_delete=models.CASCADE, null=False)

def __str__(self):
    return self.question_text

class Choice(models.Model):
   question = models.ForeignKey(Question, on_delete=models.CASCADE)
   choice_text = models.CharField(max_length=200)
   votes = models.IntegerField(default=0)
def __str__(self):
    return self.choice_text

class User(auth.models.User, auth.models.PermissionsMixin):

    def __str__(self):
        return "@{}".format(self.username)

forms.py:

class UserCreateForm(UserCreationForm):

    class Meta:
        fields = ('username', 'email', 'password1', 'password2')
        model = get_user_model()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].label = 'Display Name'
        self.fields['email'].label = 'Email Address'

class CreatePollForm(forms.ModelForm):

    class Meta:
        model = Question
        fields = ('question_text',)

и views.py

class CreatePoll(LoginRequiredMixin, generic.CreateView):
    form_class = forms.CreatePollForm
    success_url = reverse_lazy('pollapp:index')
    template_name = 'polls/createPoll.html'

1 Ответ

1 голос
/ 26 февраля 2020

Поскольку ваш CreatePollForm назначает только поле question_text, вам необходимо присвоить author в коде. CreateView - это FormView, который выполняет сохранение формы в своем методе form_valid(). Итак, в вашем CreateView вы хотите переопределить этот метод:

# in class CreatePoll
def form_valid(self, form):
    question = form.save(commit=False)  # fetch the new question, don't save
    question.author = self.request.user  # assign the user
    question.save()  # now save
    return super().form_valid(form)

Не ясно, как вы можете получить значение null для author_id, которое должно было вызвать IntegrityError. Вы уверены, что запускали makemigrations и migrate в текущем состоянии?

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