Django向User模型添加一个字段,该模型引用同一个表

时间:2017-01-23 04:26:47

标签: python django database

我正在尝试将列'赞助商'添加到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类,管理页面现在只显示一行。但是,它似乎并没有起到我需要的一对多关系的作用

有没有办法让表格输入赞助商的用户名。实现这一切的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

一个用户可以是许多其他(无人)用户的赞助商

目前,您的模型由一个用户组成,可以有多个用户,或者一个赞助商有一个用户。

现在假设User不是你的模型,你必须建立一个中间模型以另一种方式处理这种关系

class UserSponsor(models.Model):
    user = models.OneToOneField(User)
    sponsor = models.ForeignKey(Sponsor)

这显然会对你如何使用它产生不利影响。

但是,我想知道您是否错过了一个赞助商可以赞助多个用户的可能性,在这种情况下,您可以在赞助商模式上将其设为ManyToManyField