为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪7331174 2023-05-23 10:21:44
我正在尝试将血型复制为图中定义的模型。在我的 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 种类型创建了一个对象。然后,当我向每个对象添加关系时,我发现为一个对象添加给予或接收也会影响其他对象的给予和接收,从而无法复制图像中的结构。如何在不影响其他对象的情况下定义关系?在我的管理站点中,我看到字段名称为“get_gives”和“get_receives”。我如何使管理页面将字段名称显示为“提供”和“接收”,但仍将对象显示为如下图所示的字符串?
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

对于第一个问题,可能最好只有一个关系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'


查看完整回答
反对 回复 2023-05-23
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信