如何解决不再影响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,".join([item.name for item in obj.receives.all()])
admin.site.register(BloodGroup,BloodGroupAdmin)
最初,我仅通过仅提供它们的名称来创建普通的BloodGroup对象,而没有它们的Give和Receive属性。因此,我为所有8种类型创建了一个对象。然后,当我向每个对象添加关系时,我发现为一个对象添加给定或接收也会影响其他对象的给定和接收,从而无法在图像中复制结构。
- 如何定义关系而不影响其他对象?
- 在我的管理站点中,我看到字段名称为“ get_gives”和“ get_receives”。我如何使管理页面将字段名称显示为“给定”和“接收”,但仍将对象显示为字符串,如下图所示?
解决方法
对于第一个问题,最好只有一个关系gives
。可以从the reverse query中找到receives
。像这样:
class BloodGroup(models.Model):
name = models.CharField(
max_length=3
)
gives = models.ManyToManyField("self",related_name="receives",symmetrical=False)
然后,您只需要向gives
添加对象。 receives
将自动生成。
第二个问题,将short_description
属性添加到函数(reference to docs)。像这样:
get_gives.short_description = 'Gives'
get_receives.short_description = 'Receives'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。