Ошибка значения в / post / new / Can't assign " > ":" Post.author "должен быть экземпляром" User " - PullRequest
1 голос
/ 20 марта 2020

Я получаю эту ошибку "ValueError at / post / new / Cannot assign"> ":" Post.author "должен быть экземпляром" User "."

class User(models.Model):
    user = models.OneToOneField(User,on_delete = models.CASCADE)

    def __str__(self):
        return self.user.username

class Post(models.Model):
    author = models.ForeignKey('User.User',related_name="posts",on_delete = models.CASCADE)
    text = models.TextField()
    created_at = models.DateTimeField(default = timezone.now)
    updated_at = models.DateTimeField(blank = True,null =True)

    def update(self):
        updated_at = timezone.now()
        self.save()

def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})
views.py

class CreatePostView(LoginRequiredMixin, CreateView):
    # form_class = forms.PostForm
    fields = ['text',]
    model = Post

    def form_valid(self, form):
        self.object = form.save(commit=False)
        form.instance.author = self.request.user
        self.object.save()
        return super().form_valid(form)

Пожалуйста, помогите !

1 Ответ

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

Вы сделали два объекта User, объект User из django.contrib.auth и один из приложения User. Чтобы извлечь связанный объект User из приложения User, вы можете использовать self.request.user.user (если, конечно, вы сконструировали этот связанный объект):

class CreatePostView(LoginRequiredMixin, CreateView):
    # form_class = forms.PostForm
    fields = ['text',]
    model = Post

    def form_valid(self, form):
        self.object = form.save(commit=False)
        form.instance.author = <b>self.request.user.user</b>
        self.object.save()
        return super().form_valid(form)

Однако очень сложно назвать две модели одинаковы. Например, может быть лучше использовать Profile. В этом случае это будет form.instance.author = self.request.user.profile, что также более читабельно.

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