Как в 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 никак не могу. Помогите плиз советом.
  • Вопрос задан
  • 7863 просмотра
Решения вопроса 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()
Ответ написан
Ваш ответ на вопрос

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

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