python - django 一对多关系

标签 python django

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

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

最佳答案

我也非常想要一个 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。

关于python - django 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975140/

相关文章:

python - 构建请求 URL 以通过同一字段多次过滤 Django 查询集

python - 自python 2.7以来,I/O变慢了吗?

python - 运行正则表达式时出现虚假转义错误

Django + PostgreSQL : creating a database (what privileges to grant)

python - 不在 Python 中过滤

Django 通过 CharField 过滤对象最多包含两个单词

python - 如何在没有外部库且没有出现 Windows 媒体播放器的情况下播放 mp3/wav/m4a (python)

python - 在 Python 中创建可等待对象

python - 计算字符串中某个子串的重复出现次数

python - 导入错误 : No module named django. core.wsgi