У меня есть inlineformset_factory, представляющая собой группу ShoppingListItemForm.
Вид:
class ShoppingListItemForm(ModelForm):
@property
def __name__(self):
return self.__class__.__name__
def __init__(self, *args, **kwargs):
if kwargs.get('instance'):
theList = kwargs['instance']
self.fields['category'] = forms.ChoiceField(choices=[(cat.id, cat.name) for cat in ListItemCategory.objects.filter(shoppinglist__id=theList.id)])
return super(ShoppingListItemForm, self).__init__(self, *args, **kwargs)
class Meta:
model = ShoppingListItem
fields = ('item', 'brand', 'quantity', 'current', 'category', 'size', )
@login_required
def shoppinglist(request, shoppinglist_id, pod_id):
profile = request.user.get_profile()
shoppinglist = get_object_or_404(ShoppingList, pk=shoppinglist_id)
ListFormSet = inlineformset_factory(ShoppingList, ShoppingListItem, form=ShoppingListItemForm, extra=1, can_delete=True)
myForms = ListFormSet(instance=shoppinglist)
... Это прекрасно работает, за исключением того, что «категория» является внешним ключом ShoppingListItem, и мне нужно отфильтровать параметры «категории», предлагаемые в моей форме, только для тех, которые связаны с ListItemCategory через «список покупок». «список покупок» является внешним ключом как для ListItemCategory, так и для ShoppingListItem.
Модели:
class ListItemCategory(models.Model):
name = models.CharField(max_length=30, blank=True, null=True)
shoppinglist = models.ForeignKey(ShoppingList)
class ShoppingListItem(models.Model):
shoppinglist = models.ForeignKey(ShoppingList)
category = models.ForeignKey(ListItemCategory, blank=True, null=True, default = None)
item = models.CharField(max_length=200, blank=True, null=True)
class ShoppingList(models.Model):
name = models.CharField(max_length=30, blank=True, null=True, default="Pod List")
... Я думаю, что нет необходимости передавать «список покупок» в качестве дополнительного аргумента, поскольку он передается как экземпляр формы, но с добавлением этой инициализации мой отображаемый шаблон вообще ничего не имеет в наборе форм.
Любые дальнейшие советы?