Django заполнить поле формы автоматически из данных контекста - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть форма, прикрепленная к подробному виду, и она прекрасно работает при сохранении. Я хотел бы, чтобы поле формы (позиция) было предварительно заполнено значением, полученным из слага детального представления (например, jobs / человеческие ресурсы-менеджер). Модель поля формы имеет внешний ключ к модели JobPost. Нужна помощь. Часть моего взгляда выглядит так

class JobsDetailView(DetailView):
model = JobPost
template_name = 'job_post-detail.html'

def get_context_data(self, **kwargs):
    context = super(JobsDetailView, self).get_context_data(**kwargs)
    context['position'] = JobPost.objects.order_by('position')
    context['job_app_form'] = JobsForm()
    return context

foms.py

 from django import forms
 from job_post.models import JobsApplied


class JobsForm(forms.ModelForm):
   class Meta:
      model = JobsApplied
      fields = '__all__'

  def form_valid(self, form):
     form.instance.customuser = self.request.user
     return super().form_valid(form)

1 Ответ

0 голосов
/ 15 марта 2019

Я предполагаю, что вы не хотите, чтобы ваши пользователи могли взаимодействовать или изменять эти предварительно заполненные значения.

Я делаю модель комментариев / рецензий и хочу, чтобы она автоматически связывала рецензии с людьми, о которых они

models.py

class Review(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
...

Я скрываю поле person в ReviewsForm, чтобы предотвратить ввод данных пользователем, либо пропустив его из «полей», либо добавив его в «exclude».

forms.py

class ReviewsForm(forms.ModelForm):

class Meta:
    model = Review
    fields = ('rating', 'summary', 'review_text')

Затем при обработке формы в представлении я использую commit = False, чтобы я мог манипулировать значениями поля перед сохранением в базе данных. Включите предварительно заполненные значения, сохраните, а затем перенаправьте пользователя туда, где он идеален

views.py

def person(request, area_slug, category_slug, person_id):
    ...
    if form.is_valid():
        pending_review = form.save(commit=False)
        pending_review.person = Person.objects.get(pk = person_id)
        pending_review.save()
        return HttpResponseRedirect(...)
...