【问题标题】:django: ManyToManyField in admin site: how to manually add instancesdjango:管理站点中的 ManyToManyField:如何手动添加实例
【发布时间】:2015-11-29 22:06:53
【问题描述】:

我有以下课程:

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... :)

编辑:为Option 添加ModelAdmin 类:

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

【问题讨论】:

    标签: python django


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我能想到的最好的来自这个帖子/问题:

      Django Admin ManyToManyField

      使用

      filter_horizontal = ('options')
      

      TypeAdmin 类中

      做我需要的!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 2021-03-06
        • 2012-01-04
        • 2013-12-25
        • 2015-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多