0

我有以下型号

class Make(models.Model):
    make_name = models.CharField(max_length=32)
    def __unicode__(self):
        return self.book_title

class MakeModel(models.Model):
    model_number = models.IntegerField()
    model_capacity = models.IntegerField()
    model_capacity_unit = models.CharField(max_length=4)
    Make = models.ForeignKey(Make)
    def __unicode__(self):
            return self.model_number

基本上,我希望我的表单在顶部包含所有 Make 详细信息,并在下面的网格中包含所有 MakeModel 详细信息,并且能够轻松添加更多 MakeModel。比如在这个模型中

https://www.dropbox.com/s/e7rg3zxe6y8q9fi/invoicedetails.gif

任何想法需要做什么?人们提到像 inlineformset_factory 这样的东西,但我不相信如何使用它,或者它是否会做我期望的事情。

任何帮助,将不胜感激

4

1 回答 1

2

您需要一个表单和一个表单集。

  • 一种形式:一种形式
  • 表单集:一个表单的多个副本

您的视图在 POST 周期中看起来像这样:

更新:哦,对了,外键。老实说,最简单的方法就是将表单集 commit=False 并手动分配 FK。您也可以使用内联表单集。https://docs.djangoproject.com/en/dev/ref/forms/models/#django.forms.models.inlineformset_factory

FormSet = modelformset_factory(MakeModel)
Form = modelform_factory(Make)

def myview(request):
    formset = FormSet(request.POST or None)
    form = Form(request.POST or None)

    if request.method == 'POST':               
        if formset.is_valid() and form.is_valid():
           main_instance = form.save()
           formset.save(commit=False)
           for instance in formset:
               instance.fk = main_instance
               instance.save()

https://docs.djangoproject.com/en/dev/topics/forms/formsets/

于 2013-06-18T17:44:03.283 回答