用于创建具有一对多关系的新对象的内联formset?

时间:2011-12-24 00:52:33

标签: django django-forms django-views

models.py:

class Item(models.Model):
    name = models.CharField(max_length=50)

class ItemImage(models.Model):
    image = models.ImageField(upload_to='item_pics')
    item = models.ForeignKey(Item, related_name='images')

使用上面定义的模型,ItemItemImage具有一对多的关系。我正在使用django表单,该表单允许用户创建新的Item实例,并选择上传最多两个ItemImage。请注意,需要在同一阶段创建Item和关联ItemImage对象。

forms.py:

class ItemForm(ModelForm):
    img_1 = fields.ImageField()
    img_2 = fields.ImageField()

    class Meta:
        model = Item
        fields = ('name', 'description', 'circles', 'location', 'rental_fee', 'rental_time_unit', 'deposit', 'rental_rules',)

再考虑一下,我猜这可能是为ItemForm创建ModelForm并使用内联的更好方法,而不是将图片字段添加到ItemImage表单集即可。我从未使用内联formset,因此我的概念仍然模糊不清。我想知道这是否是使用内联formset的正确方案。

1 个答案:

答案 0 :(得分:3)

是的,这将是一个非常典型的情况,您可以使用ModelFormSet

如果img_1和img_2是类Item的实际字段,则forms.py中使用的方法是合适的,但在处理一组相关模型时,ModelFormSet是更好的选择。

考虑将来允许用户使用三张图片而不是两张图片的情况。使用ModelFormSet,这将是一个字符代码更改。如果你想收集关于ItemImage类的辅助信息,这也是一个微不足道的改变。