@RabbitRun9

Как добавить в CreateView пользователя?

Есть модель User, наследованная от AbstractUser и дополненная:
class User(AbstractUser):
    email = models.EmailField(unique=True)
    bio = models.TextField(blank=True, max_length=1000)
    date_of_birth = models.DateField(blank=True, null=True)


И модель Поста:
class Post(models.Model):
    theme = models.CharField(max_length=50)
    content = models.TextField()
    photo = models.ImageField(upload_to='media/')
    status = models.BooleanField(default=True)
    create_date = models.DateTimeField(auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)


Форма:
class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['theme', 'content', 'photo', 'user']
        widgets = {
            'theme': forms.TextInput(attrs={'class': 'form-control'}),
            'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
        }


Вьюха:
class CreatePost(LoginRequiredMixin, CreateView):
    form_class = PostForm
    template_name = '/add_post.html'
    raise_exception = True


Всё хорошо работает, но… При публикации Поста внизу всегда можно выбрать Пользователя из списка (выпадающий список), что не есть хорошо.
Как сделать так, чтоб пользователь сам подтягивался тот, который публикует Пост?

(если убираю "user" из полей в форме fields = ['theme', 'content', 'photo', 'user'] то Пост просто не отправляется, не находит юзера, и выдаёт ошибку.)

Буду благодарен любой помощи.
  • Вопрос задан
  • 30 просмотров
Пригласить эксперта
Ответы на вопрос 1
@s1vemod
Вы можете переопределить метод form_valid у CreateView:

Пример:
def form_valid(self, form):
        instance = form.save(commit=False)
        instance.user = request.user
        instance.save() 

        return redirect(self.get_success_url())


Взято из:
https://habr.com/ru/post/137960/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы