簡體   English   中英

停止影響 Django 多對多 model 的其他對象

[英]Stop affecting other objects of Django Many to Many model

我正在嘗試將血型復制為 Model,如此圖片中所定義。 血型關系 .

在我的 models.py 文件中,我有我的代碼來復制這樣的血型

class BloodGroup(models.Model):
    name = models.CharField(
        max_length=3
    )
    gives = models.ManyToManyField("self")
    receives = models.ManyToManyField("self")

    def __str__(self):
        return self.name

在我的 admin.py 文件中,我注冊了 model 如下

class BloodGroupAdmin(admin.ModelAdmin):
    model = BloodGroup
    list_display = ['name', 'get_gives', 'get_receives']

    def get_gives(self, obj):
        return ", ".join([item.name for item in obj.gives.all()])

    def get_receives(self, obj):
        return ", ".join([item.name for item in obj.receives.all()])

admin.site.register(BloodGroup, BloodGroupAdmin)

最初,我通過僅提供它們的名稱來創建沒有給予和接收屬性的普通 BloodGroup 對象。 因此,我為所有 8 種類型創建了 object。 然后,當我向每個 object 添加關系時,我發現為一個 object 添加給予或接收也會影響其他對象的給予和接收,因此無法復制圖像中的結構。

在此處輸入圖像描述

  1. 如何在不影響其他對象的情況下定義關系?
  2. 在我的管理站點中,我看到字段名稱為“get_gives”和“get_receives”。 我如何讓管理頁面將字段名稱顯示為“給予”和“接受”,但仍將對象顯示為字符串,如下圖所示?

對於第一個問題,最好只gives一個關系。 反向查詢中可以找到receives 像這樣:

class BloodGroup(models.Model):
    name = models.CharField(
        max_length=3
    )
    gives = models.ManyToManyField("self", related_name="receives", symmetrical=False)

然后你只需要添加對象給gives receives將自動生成。

對於第二個問題,將short_description屬性添加到函數( 參考文檔)。 像這樣:

get_gives.short_description = 'Gives'
get_receives.short_description = 'Receives'

暫無
暫無

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

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