我正在尝试将列'赞助商'添加到django的用户模型中。问题是我希望此列引用用户名字段(并且它可以留空)。我的意思是,一个用户可以成为许多其他(无人)用户的赞助商
这样的事情:
(django用户模型表)
+--------+------------------+
|username| sponsor |
+--------+------------------+
| Tom | ... |
| John | Tom |
| Louis | Tom |
| Michael| Louis |
+--------+------------------+
我有以下型号
# models.py
class Sponsor(models.Model):
user = models.OneToOneField(User, primary_key=True)
sponsor = models.ForeignKey(User, null=True, to_field='username', related_name='spn')
我不知道我是否做得很好。但是,为了通过管理页面添加赞助商,我已完成以下操作:
# admin.py
class SponsorInline(admin.TabularInline):
model = Sponsor
fk_name = 'sponsor'
当我想在我的管理页面中添加一个新用户时,我收到三个滚动条来添加赞助商,当然看起来不行。 Look like this
修改
我添加了属性
extra = 1
进入我的SponsorInLine类,管理页面现在只显示一行。但是,它似乎并没有起到我需要的一对多关系的作用
有没有办法让表格输入赞助商的用户名。实现这一切的最佳方法是什么?
答案 0 :(得分:0)
一个用户可以是许多其他(无人)用户的赞助商
目前,您的模型由一个用户组成,可以有多个用户,或者一个赞助商有一个用户。
现在假设User
不是你的模型,你必须建立一个中间模型以另一种方式处理这种关系
class UserSponsor(models.Model):
user = models.OneToOneField(User)
sponsor = models.ForeignKey(Sponsor)
这显然会对你如何使用它产生不利影响。
但是,我想知道您是否错过了一个赞助商可以赞助多个用户的可能性,在这种情况下,您可以在赞助商模式上将其设为ManyToManyField
。