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')
使用上面定义的模型,Item
与ItemImage
具有一对多的关系。我正在使用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的正确方案。
答案 0 :(得分:3)
是的,这将是一个非常典型的情况,您可以使用ModelFormSet。
如果img_1和img_2是类Item的实际字段,则forms.py中使用的方法是合适的,但在处理一组相关模型时,ModelFormSet是更好的选择。
考虑将来允许用户使用三张图片而不是两张图片的情况。使用ModelFormSet,这将是一个字符代码更改。如果你想收集关于ItemImage类的辅助信息,这也是一个微不足道的改变。