4

在我的应用程序中,我需要将Useruser-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-1for userfile--user

class UserFile(db.models.Model):
    filename = db.models.CharField()
    user     = ??
4

2 回答 2

3

我也很想要一个 OneToMany 字段。但是我认为 Django 中没有这样的字段的原因是这会在相关模型的表上创建一个 FK:

  1. 这有点令人困惑

  2. 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。

于 2012-06-11T06:45:28.263 回答
0

您可以为此使用用户配置文件,尽管我认为这有点矫枉过正。

class UserProfile(models.Model):
    file = models.ForeignKey(UserFile)

然后AUTH_PROFILE_MODULE在 settings.py 中设置设置并运行 syncdb。

现在您可以使用user.get_profile().file来访问与user.

用户资料教程

于 2012-07-06T09:47:29.027 回答