【发布时间】:2012-06-11 06:08:06
【问题描述】:
在我的应用程序中,我需要将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 = ??
【问题讨论】:
-
在 Django 中创建
1-N关系的方法是使用外键。在这种情况下,我将在User模型中创建一个外键。我没有发现任何问题。 -
@DiegoNavarro 从不修改django的代码。除非你确定他们会接受你的补丁:这里肯定不是这种情况,因为它是特定于项目的。
-
我不是在说修改任何Django代码,只是回答关系问题。在这种情况下,您应该将其子类化或创建一个中间件。