簡體   English   中英

在 django 管理員中任意設置 ManyToMany 字段的位置/順序?

[英]Arbitrarily set position/order of ManyToMany field in django admin?

我有以下型號:

# 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

我希望能夠通過將子表設置在聯結表中來對其進行排序; 因此不會影響子表。 我正在考慮在聯結表中設置 position 字段,在數據庫中手動添加它是唯一的方法嗎? 我對 Django 相當陌生,如果這恰好只是一個基本問題,我很抱歉。

通常的ManyToMany在這里不起作用,因為關聯表應該包含順序。 所以,在這種情況下,你必須through混合:

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

其中ChildGallery是一個連接 model:

class ChildGallery(models.Model):
    child = models.ForeignKey(Child)
    gallery = models.ForeignKey(Gallery)
    order = models.IntegerField()

    class Meta:
        ordering = ['order'] 

我不知道你想如何實現 order,但如果它只是一個數字,你可以使用IntegerField ,如上所示。

PS 注意我將所有關聯模型都用引號括起來(例如'Child'而不是Child )。 它允許打破循環依賴,所以我建議使用這種方式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM