在我的应用中,我需要将User
与user-selected-filename
用户只能选择一个文件名。但许多用户可以选择相同的文件名
所以,数据库表可能是这样的
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_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
} {/ 1> userfile--user
class UserFile(db.models.Model):
filename = db.models.CharField()
user = ??
答案 0 :(得分:3)
我也非常喜欢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。
答案 1 :(得分:0)
你可以使用userprofiles,虽然我认为它有点矫枉过正。
class UserProfile(models.Model):
file = models.ForeignKey(UserFile)
然后在settings.py中设置AUTH_PROFILE_MODULE
设置并运行syncdb。
现在,您可以使用user.get_profile().file
访问与user
相关联的文件。