在我的应用中,我需要将 User
与 user-selected-filename
相关联
一个用户只能选择一个文件名,但同一个文件名可以被多个用户选择
所以,数据库表可能是这样的
auth_user(由 django.contrib.auth
创建)
-----------------------------------------
id | username | first_name | last_name | ...
------------------------------------------
1 | bert | bert | russel |...
------------------------------------------
2 | jon | jon | snow | ...
-------------------------------------------
3 | alice | alice | tanner | ...
用户文件表
-----------------------------------------------
id | filename
------------------------------------------------
1 | '/clips/summary.mp4'
------------------------------------------------
2 | '/clips/intro.mp4'
------------------------------------------------
user_userfile 表
-----------------------------------
user_id | userfile_id
-----------------------------------
1 | 1
-----------------------------------
2 | 1
-----------------------------------
3 | 2
-----------------------------------
userfile--user
似乎是一个1-n
关系。 1 个用户文件可以关联多个用户。
那么,我应该用什么来表示这种关系呢? 在下面给出的 UserFile 类中,如果我使用
user = db.models.ForeignKey(django.contrib.auth.User)
这只会产生反向关系(即 n-1
for userfile--user
)
class UserFile(db.models.Model):
filename = db.models.CharField()
user = ??
最佳答案
我也非常想要一个 OneToMany 字段。但是我认为 Django 中没有这样的字段的原因是这会在相关模型的表上创建一个 FK:
这有点令人困惑
Syncdb 无法将列添加到现有表
在相关模型上添加 FK 的解决方案是使用“不受支持”的功能:
from django.contrib.auth.models import User
models.ForeignKey(Badge, null=True, blank=True).contribute_to_class(User, 'badge')
然后你应该添加migrate auth_user添加 FK。
关于python - django 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975140/