如何创建一个表单来创建要在同一表单上使用的新相关模型对象?

时间:2012-04-29 03:45:20

标签: python django forms models

好的,我确定这个问题令人困惑。想象一下,我们有这个模型:

class Phone(models.Model):
    serial = models.CharField(max_length=13, unique=True)
    model = models.CharField(max_length=4, choices=MODELOS)

class Contract(models.Model):
    number = models.IntegerField()
    phone = models.OneToOneField(Phone)
    notes = models.TextField(blank=True, null=True)
    sign = models.BooleanField(default=False)

我需要创建一个可以为这些模型中的所有字段输入的表单。在一个页面中,我需要指定手机的序列和型号以及合同的编号,注释和标志。电话字段应该是在同一时刻创建的字段。我怎么能做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

正如ilvar建议的那样,定义两个modelforms

class PhoneForm(forms.ModelForm):
    class Meta:
        model = Phone

class ContractForm(forms.ModelForm):
    class Meta:
        model = Contract
        exclude = ('phone',)

def add(request):
   ...
   if request.method == 'POST':
       phone_form = PhoneForm(request.POST)
       contract_form = ContractForm(request.POST)
       if phone_form.is_valid() and contract_form.is_valid():
           phone = phone_form.save()
           contract = contract_form.save(commit=False)
           contract.phone = phone
           contract.save()
   ...

另外,只是好奇为什么你使用OneToOneField而不是ForeignKeyManyToManyField