我想创建一个表单集,其中每种形式都有一个下拉指向一组销售项目。
模型:
class SalesItem(models.Model):
item_description = models.CharField(max_length=40)
company = models.ForeignKey(Company)
在这里,我创建一个下拉列表的形式,希望能在公司通过为下拉源。 持有这种想法,因为我认为这是不可能在我的情况。
形成:
class SalesItemFSForm(Form):
sales_item = forms.ModelChoiceField(required=False, queryset = '')
def __init__(self, company, *args, **kwargs):
super(SalesItemFSForm, self).__init__(*args, **kwargs)
self.fields.sales_item.queryset = company.salesitem_set.all()
现在,我的观点中,我想创建这种形式的一个formset:
formset_type = formset_factory(SalesItemFSForm, extra=0)
这个问题变得马上清楚,因为似乎没有办法,我可以通过在公司确定的下拉源。
我应该怎么做呢?
非常感谢,
更新:
似乎极端爱国义破解它。 :)
一个工程的ModelForm比形式更好。 在它的上面我不得不添加fields = {}
至SalesItemFSForm,以确保该SalesItem的字段不显示在模板了。 因为所有我们感兴趣的是我们的下拉菜单(SalesItem)。
到现在为止还挺好。 但现在我看到显示为许多的下拉列表中,因为我有Salesitems。 它不应该;吨显示任何除非用户按压一个jquery按钮。
我认为这是问题,我们不应该在传递
formset_type = modelformset_factory(SalesItem, form=SalesItemFSForm, extra=0)
因为我们的表单不需要SalesItem的任何实例。 我们需要一个假人模型。
这是我试图与经典的表单集,而不是最初ModelFormset解决它的原因。 所以,它的种类有一半。 :)
更新2:
极端爱国义,好点。 有效地我就在想一个自定义保存,在这里我只看到有多少表单集被通过jQuery用户添加和我在视图中保存的。 从字面上看SalesItem是一个多对多场。 但是标准的M2M部件是可怕的。 因此,我想与表单集,其中每个salesItem是一个下拉来取代它。 然后,用户可以尽可能多的下拉菜单(在表单集的形式)添加到页面并提交。 然后我想补充的视图之间的关系。
class DealType(models.Model):
deal_name = models.CharField(_(u"Deal Name"), max_length=40)
sales_item = models.ManyToManyField(SalesItem)
price = models.DecimalField(decimal_places=2, max_digits=12)
希望这清楚。 也许有这样做的更简单的方法。 :)
顺便说一句我也发现了这个优秀的jQuery 代码片段如何添加/从一个formset删除表格/。
更新3:
事实上,实例化这样的对象时,我们只会得到在该formset一种形式,可以通过jQuery添加更多。 完善!! 除非有一个更简单的方式来实现这一目标。 :)
salesitem_formsets = formset_type(queryset=SalesItem.objects.filter(pk=1))
然而,这伤愈复出狩猎您在request.POST,因为你不能只是做:
salesitem_formsets = formset_type(request.POST)
它仍然需要设置的查询集。 棘手的情况......