django:管理站点中的ManyToManyField:如何手动添加实例

时间:2015-09-03 22:22:43

标签: python django

我有以下课程:

class Option(models.Model):    
    default = models.BooleanField(default=False)    
    name = models.CharField(max_length=50)    
    def __unicode__(self):
        return self.name

我有另一个使用它的课程:

class Type(models.Model):
   ''' more properties here ''' 
   options = models.ManyToManyField(Option, blank=True)

我们的想法是,在django的管理站点中,我可以手动将Option个实例添加到Type

现在,我已在管理站点中创建了4个Option实例。 当我转到Type配置,options时,所有4个实例都已存在。我希望该框为空并手动添加,因为对于Type的每个实例,列表应该不同。

我该怎么做?有人告诉我,我误解了ManyToManyField ......:)

编辑:为ModelAdmin添加Option课程:

class OptionAdmin(admin.ModelAdmin):
    options = forms.ModelMultipleChoiceField(queryset=Option.objects.all(), widget=FilteredSelectMultiple("verbose name", is_stacked=False))

2 个答案:

答案 0 :(得分:0)

我会从Type模型中删除“options”实例并创建一个新类:

class Assignment(models.Model):
    type = models.ForeignKey(Type)
    option = models.ForeignKey(Option)

然后我会根据需要创建尽可能多的分配行,以便将选项附加到类型。但是,在管理站点中手动管理非常困难......

答案 1 :(得分:0)

我能想出的最好的是这篇帖子/问题:

Django Admin ManyToManyField

使用

filter_horizontal = ('options')

TypeAdmin

做我需要的!