RabbitRun9
@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'] то Пост просто не отправляется, не находит юзера, и выдаёт ошибку.)

Буду благодарен любой помощи.
  • Вопрос задан
  • 576 просмотров
Решения вопроса 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/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
form = ArticleForm(request.POST)
if form.is_valid():
current_user = request.user
new_article = form.save()
AR = Article.objects.get(id = new_article.id)
AR.author = current_user
AR.save()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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