django从上下文数据自动填充表单字段

django从上下文数据自动填充表单字段,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我有一个表单附在DetailedView上,保存后可以正常工作。我希望表单字段(职位)预先填充来自详细视图的slug的值(例如jobs/human resource manager)。表单字段的模型具有JobPost模型的Foreignkey。我需要帮助。我的部分观点是这样的 class JobsDetailView(DetailView): model = JobPost template_name = 'job_post-detail.html' def get_context_data(

我有一个表单附在DetailedView上,保存后可以正常工作。我希望表单字段(职位)预先填充来自详细视图的slug的值(例如jobs/human resource manager)。表单字段的模型具有JobPost模型的Foreignkey。我需要帮助。我的部分观点是这样的

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
福姆斯·佩伊

 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)

我假设您不希望您的用户能够与这些预填充值进行交互或更改这些值

我正在制作一个评论/评论模型,我希望它能自动将评论链接到他们所关注的人

型号.py

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

class Meta:
    model = Review
    fields = ('rating', 'summary', 'review_text')
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(...)
我在ReviewForm中隐藏person字段,通过从“字段”中省略它或将其添加到“排除”中来防止用户输入

forms.py

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

class Meta:
    model = Review
    fields = ('rating', 'summary', 'review_text')
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(...)
然后,在视图中处理表单时,我使用commit=False,以便在保存到数据库之前操作字段值。 包括预填充的值,保存,然后在理想的位置重定向用户

视图.py

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

class Meta:
    model = Review
    fields = ('rating', 'summary', 'review_text')
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(...)