Задать вопрос

Как в django автоматически заполнить поле при создании объекта в форме?

Есть модели :
class Project(models.Model):
     title = models.CharField(max_length=200, verbose_name=u'Название')
     slug = models.SlugField(unique=True, verbose_name=u'URL')
     user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'Пользователь')
     body = models.TextField(verbose_name=u'Описание проекта')

class Response(models.Model):
     user = models.ForeignKey(settings.AUTH_USER_MODEL)
     project = models.ForeignKey(Project)
     body = models.TextField()
     active = models.BooleanField(default=False)

Есть форма:
class AddResponseForm(forms.ModelForm):
    class Meta:
        model = Response
        fields = ('body',)

Т.е. при заполнении отклика на проект пользователем необходимо, чтобы поля user и project заполнялись скрытно от пользователя, автоматом так сказать(текущий user и project к которому пишу отклик). С user проблему решил
form.instance.user = self.request.user
, а вот с project никак не могу. Помогите плиз советом.
  • Вопрос задан
  • 8094 просмотра
Подписаться 4 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Разработка на Python
    1 год
    Далее
Решения вопроса 1
@blackbb Автор вопроса
Вопрос закрыт. Разобрался.
def form_valid(self, form):
        form.instance.user = self.request.user
        project = Project.objects.get(slug=self.kwargs['project_slug'])
        form.instance.project = project
        return super(ResponseCreate, self).form_valid(form)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Во-первых, стоит сделать поле модели project скрытым полем формы:
class AddResponseForm(forms.ModelForm):
    class Meta:
        model = Response
        fields = ('body', 'project')
        widgets = {'project': forms.HiddenInput()}


А потом в views.py:
form = AddResponseForm(request.POST)
if form.is_valid():
    response = form.save(commit=False)
    response.user = request.user
    response.save()
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы