我在 Django 中开发的模型有些复杂。基本思想是网站上的用户可以给人们奖励,但我也想跟踪用户和奖励获得者之间的关系。一个用户可以给同一个人多个奖励,但他们之间只有一种关系。模型看起来像这样(用户是标准的 auth_user 模型):
class Recipient(models.Model):
name = models.CharField(max_length=255)
senders = models.ManyToManyField(User, through='Relationship')
class Relationship(models.Model):
user = models.ForeignKey(User)
recipient = models.ForeignKey(Recipient)
relationship = models.CharField(max_length=255, blank=True, default='')
class Meta:
unique_together = (('user', 'recipient'),)
class Award(models.Model):
recipient = models.ForeignKey(Recipient)
user = models.ForeignKey(User)
relationship = models.ForeignKey(Relationship)
award_name = models.CharField(max_length=255)
在管理员中我有类似的东西
class RelationshipInline(admin.StackedInline):
model = Relationship
class AwardAdmin(admin.ModelAdmin):
inlines = [RelationshipInline]
exclude = ['relationship']
admin.site.register(Recipient)
admin.site.register(Award, AwardAdmin)
当我尝试在管理员中添加奖励时,我收到错误“<class 'Relationship'> has no ForeignKey to <class 'Award'>”。我意识到这是因为当我编辑 Award 时,Django 不知道应该内联编辑哪个关系,但事实上(对人类而言)很明显它是具有相同用户/收件人对的关系。我不能指定关系中的用户/收件人是一个键,因为 Django 不支持多列键(所以我所能做的就是将它们指定为 unique_together)。同样,我不能指定 Award 中的用户/收件人是关系的多列外键。
有什么办法可以得到我想要得到的东西吗?当 Award 与关系存在多对一关系时,必须在管理员中单独编辑关系似乎是一个巨大的不便。有没有更好的方法来组织模型?