使用Django 1.6,django-select2(最新)和jquery.formset.js(最新),我正在努力应对非常简单的事情。基本上当我使用jquery.formset.js提供的add formset功能时,新的formset缺少django-select2提供的select字段,尽管formset的其余部分渲染得很好。
这是一个相当基本的设置:
class PartNumber(models.Model):
name = models.CharField("Description", max_length=100)
supplier_part_number = models.CharField(max_length=30, unique=True, blank=True, null=True)
class PurchaseOrder(models.Model):
po_number = models.CharField('PO number', max_length=10, unique=True)
ordered_date = models.DateField(default=today)
class PurchaseOrderPart(models.Model):
part_number = models.ForeignKey(PartNumber, related_name='purchases')
po_number = models.ForeignKey(PurchaseOrder, related_name='partslist')
delivery_date = models.DateField(null=True, blank=True)
qty_ordered = models.IntegerField('Quantity ordered',validators=[MinValueValidator(1)])
cost = models.DecimalField('Unit Cost', max_digits=10,decimal_places=2,blank=True,null=True)
我有一个PurchaseOrder的创建视图,其中PurchaseOrderParts为inline_formset:
class PurchaseOrderPartForm(forms.ModelForm):
part_numbers = PartNumberChoices()
class Meta:
fields = ('part_numbers', 'delivery_date', 'qty_ordered', 'cost')
model = PurchaseOrderPart
widgets={
'part_numbers': forms.Select(attrs={'class':'form-control'}),
'delivery_date': CalendarWidget(attrs={'class':'input-append form-control'}),
'qty_ordered': forms.NumberInput(attrs={'class':'form-control'}),
'cost': forms.NumberInput(attrs={'class':'form-control'}),
}
POPartFormset = inlineformset_factory(PurchaseOrder, PurchaseOrderPart, form=PurchaseOrderPartForm, extra=1, can_delete=True)
我正在使用jquery.formset.js,以便有"添加"并且"删除" PurchaseOrder创建视图上的按钮,以便可以添加任意数量的PurchaseOrderPart(任何一个PO可能从1到无限部分附加,实际上更可能是< 10)。
这很好用。
但是,PurchaseOrderPart上的PartNumber fk有一个巨大的列表(大约2500个项目),因此选择列表很不方便。
我安装了django-select2并且对于它运行的容易程度印象非常深刻:
class PurchaseOrderPartForm(forms.ModelForm):
part_numbers = PartNumberChoices()
class Meta:
fields = ('part_numbers', 'delivery_date', 'qty_ordered', 'cost')
model = PurchaseOrderPart
widgets={
'part_numbers': django_select2.AutoHeavySelect2Widget(),
'delivery_date': CalendarWidget(attrs={'class':'input-append form-control'}),
'qty_ordered': forms.NumberInput(attrs={'class':'form-control'}),
'cost': forms.NumberInput(attrs={'class':'form-control'}),
}
这是我们遇到问题的时候。这一切都有效,直到你使用jquery.formset.js添加一个新的formset - 它渲染完美但不包括django-select2选择。
特别是,新的formset缺少此代码:
<div class="select2-container select2-container-active" id="s2id_id_partslist-1-part_numbers"><a href="javascript:void(0)" onclick="return false;" class="select2-choice" tabindex="-1"> <span class="select2-chosen"> </span><abbr class="select2-search-choice-close"></abbr> <span class="select2-arrow"><b></b></span></a><input class="select2-focusser select2-offscreen" type="text" id="s2id_autogen5"></div>
我如何强制插入select2-container?
答案 0 :(得分:1)
这是已知的django-select2错误,已在最近的合并中得到修复。 当你说你正在运行最新版本时,你的意思是来自github还是来自PIP?
无论哪种方式,您可能会对此感兴趣: https://github.com/applegrew/django-select2/pull/127