【问题标题】:Arbitrarily set position/order of ManyToMany field in django admin?在 django admin 中任意设置 ManyToMany 字段的位置/顺序?
【发布时间】:2020-07-20 15:02:39
【问题描述】:

我有以下型号:

# Child
class Media (models.Model):
    id = models.BigAutoField(primary_key=True)
    name = models.CharField(max_length=128,unique=True)
    file = models.FileField()
    enabled = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
    return self.name

# Parent
class Gallery(models.Model):
    id = models.BigAutoField(primary_key=True)
    name = models.CharField(max_length=128,unique=True)
    description = models.TextField(max_length=254,null=True)
    medias = models.ManyToManyField(Media,related_name='medias')
    enabled = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    class Meta:
        verbose_name = "gallery"
        verbose_name_plural = "galleries"
    def __str__(self):
        return self.name

我希望能够通过将子表设置在联结表中来对其进行排序;因此不会影响子表。我正在考虑在联结表中设置位置字段,在数据库中手动添加它是唯一的方法吗?我对 Django 还很陌生,如果这只是一个基本问题,我很抱歉。

【问题讨论】:

    标签: python django django-admin database-relations


    【解决方案1】:

    通常的ManyToMany 在这里不起作用,因为关联表应该包含顺序。所以,这种情况下你必须把through 加入进来:

    class Gallery(models.Model):
        medias = models.ManyToManyField('Media',related_name='medias', through='ChildGallery')
    

    ChildGallery 是一个连接模型:

    class ChildGallery(models.Model):
        child = models.ForeignKey(Child)
        gallery = models.ForeignKey(Gallery)
        order = models.IntegerField()
    
        class Meta:
            ordering = ['order'] 
    

    我不知道你想如何实现 order,但如果它只是一个数字,你可以使用IntegerField,如上所示。

    附:请注意,我将所有关联模型都用引号括起来(例如 'Child' 而不是 Child)。它允许打破循环依赖,所以我建议使用这种方式

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2013-05-23
      • 2011-03-28
      • 1970-01-01
      相关资源
      最近更新 更多