猿问

停止影响 Django 多对多模型的其他对象

我正在尝试将血型复制为图中定义的模型。

在我的 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 文件中,我按如下方式注册了模型


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 对象,没有它们的 gives 和 receives 属性,只提供了它们的名称。因此,我为所有 8 种类型创建了一个对象。然后,当我向每个对象添加关系时,我发现为一个对象添加给予或接收也会影响其他对象的给予和接收,从而无法复制图像中的结构。

http://img1.mukewang.com/646c237500015dbe06540247.jpg

  1. 如何在不影响其他对象的情况下定义关系?

  2. 在我的管理站点中,我看到字段名称为“get_gives”和“get_receives”。我如何使管理页面将字段名称显示为“提供”和“接收”,但仍将对象显示为如下图所示的字符串?


慕田峪7331174
浏览 148回答 1
1回答

HUX布斯

对于第一个问题,可能最好只有一个关系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'
随时随地看视频慕课网APP

相关分类

Python
我要回答