【问题标题】:Form to edit specific instance of model用于编辑模型特定实例的表单
【发布时间】:2017-10-27 18:06:58
【问题描述】:

我知道以前有人问过这个问题,但我已经阅读了答案,但没有一个是足够的。我正在尝试制作一个工作委员会网站,雇主可以在其中注册和发布工作。所以有一个Employer 对象,每个雇主可以发布任意数量的Jobs。我不确定如何创建一个可以编辑特定模型实例的表单。

模特Job

poster = models.ForeignKey(Employer, on_delete=models.CASCADE)
    job_title = models.CharField(max_length=50)
    establishment_name = models.CharField(max_length = 50)
    details = models.TextField(max_length = 2000)
    salary = models.CharField(max_length = 20)
    address = models.CharField(max_length = 50)
    city = models.CharField(max_length = 50)

    state_choices = (
         #long list omitted on purpose 
)
    state = models.CharField(choices=state_choices, max_length = 20)
    zip_code = models.CharField(max_length = 10)


    def __str__(self):
        return self.job_title + " - " + self.establishment_name \
               + ", " + self.poster.user.first_name + " " +self.poster.user.last_name

我有一个发布职位的表格:

class JobPostForm(ModelForm):
    class Meta:
        model = Job
        fields= ('job_title',
                 'establishment_name',
                 'details',
                 'address',
                 'city',
                 'state',
                 'zip_code',
               )

发布工作的视图:

if request.method == 'POST':
    form = JobPostForm(request.POST)
    if form.is_valid():
        job_object = form.save(commit=False)
        job_object.poster = request.user.employer
        job_object.save()
        return redirect('employer_home')


else:
    form = JobPostForm()

以及发布工作的模板:

<form method="post" class="">
  {% csrf_token %}
  {{ form.as_p}}
  <button type="submit">Post Job</button>
</form>

但不确定如何创建可以编辑职位的内容。我已经看到使用UpdateView() 的示例,但无法使其正常工作。有谁知道如何让它适用于这个特定的实例?

【问题讨论】:

  • 使用UpdateView 应该像指定要更新的表单类一样简单,并确保pk 是URL 的kwargs 的一部分。如果您不想在 URL 中包含 pk,您可以覆盖视图类中的 get_object 以通过应用程序所需的任何方式获取对象。

标签: django django-models django-forms django-templates


【解决方案1】:

UpdateWiew

from django.views.generic import UpdateView
class JobUpdateView(UpdateView) 
    model = Job
    form_class = JobPostForm
    template_name = "Jobform.html"

    def get_object(self, *args, **kwargs):
       job = get_object_or_404(Job, pk=self.kwargs['pk'])
       return job

    def get_success_url(self, *args, **kwargs):
       return reverse("ulr_name_to_redirect_after_success")

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多