2011-12-24 63 views
2

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,我猜测它可能是一个更好的方法来创建一个ItemImageModelForm使用直列formset。我从来没有使用内联formset,因此我的概念仍然是模糊的。我想知道这是否是使用内联formset的正确方案。

回答

2

是的,这将是你将使用ModelFormSet一个很典型的情况。如果img_1和IMG_2是类项目的实际领域

在forms.py使用的方法是适当的,但与一组相关模型的处理时,ModelFormSet是一个更好的选择。

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

+0

感谢确认我的猜测,并指出正确的道路。 – tamakisquare 2011-12-24 07:46:02

+0

@tamakisquare从昨天开始,我一直试图围绕这一点。上面的工作示例可能有所帮助!基本上,我想知道如何使用表单集_along WITH_已经在上 – Anupam 2017-10-11 05:47:14

+0

页@Anupam我希望我可以帮助你在这里所使用的模型形式的模型,但因为我最后一次使用Django的服务器端渲染它已经多年。我所有的Django代码仅用于API。 – tamakisquare 2017-10-11 18:04:03

相关问题