Django将外键传递给create视图

时间:2014-11-16 00:55:17

标签: django forms primary-key

我正在尝试将外键传递给创建视图,最好的方法是什么?

型号:

class Building(models.Model):
     # Name of the project
     name = models.CharField(max_length=25, verbose_name='Project ID')
     # The address of the building
     address = models.CharField(max_length=100, verbose_name='Address')

class Cabinet(Project):
     # The level that kitchen needs to be installed if applicable
     level = models.IntegerField(null=True, blank=True, verbose_name="Floor")
     # The building
     building = models.ForeignKey(Building)

URL:

urlpatterns = patterns('',
           ...
           # url to add new cabinet
           url(r'^cabinet/new/(?P<pk>\d+)/$', CabinetCreate.as_view(), name='new_cabinet'),
           ...

视图:

class CabinetCreate(generic.CreateView):
   model = Cabinet
   form_class = UpdateCabinetForm
   template_name = "projects/cabinetEdit.html"

   def get(self, request, *args, **kwargs):
      self.object = None
      form_class = self.get_form_class()
      form = self.get_form(form_class)
      return self.render_to_response(self.get_context_data(form=form))

   def post(self, request, *args, **kwargs):
      self.object = None
      form_class = self.get_form_class()
      form = self.get_form(form_class)
      if form.is_valid():
        self.object = form.save(commit=False)
        self.object.save()

模板:

我将建筑物ID传递给创建视图。

 ...
 <a href="{% url 'projectmonitor:new_cabinet' building.id %}" class="left-link">Add New Cabinet</a>
 ... 

创建新橱柜时,建筑物对象已经存在,有一个&#34; Save&#34;在CabinetCreate视图模板上触发POST请求的按钮,但每次保存新的cabinet对象时,它都会显示:

Column 'building_id' cannot be null

在保存机柜之前,有没有人知道如何分配建筑物或建筑物ID。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在保存对象之前分配构建外键...

if form.is_valid():
        self.object = form.save(commit=False)
        # self.object.building = BUILDING OBJECT
        self.object.save()