问题描述
我正尝试将这张图片中定义的“血型”复制为模型。
class BloodGroup(models.Model):
name = models.CharField(
max_length=3
)
gives = models.ManyToManyField("self")
receives = models.ManyToManyField("self")
def __str__(self):
return self.name
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'