python - Django 中的多对一字段

标签 python django

我试图在“多”类中定义一个多对一字段。例如,假设一个用户只能是一个组的成员,但一个组可以有很多用户:

class User(models.Model):
    name = models.CharField()

class Group(models.Model):
    name = models.CharField()
    # This is what I want to do -> users = models.ManyToOneField(User)

Django 文档会告诉我在用户模型中定义一个组字段作为外键,但我需要在组模型中定义关系。据我所知,没有 ManyToOneField,我宁愿不必使用 ManyToManyField。

最佳答案

如您所猜,ManyToOne 字段在 Django 中称为 ForeignKey。您必须在 User 类上定义它才能使逻辑正常工作,但 Django 会自动在 Groups 模型上提供一个反向属性:

class Group(models.Model):
    name = models.CharField(max_length=64)

class User(models.Model):
    name = models.CharField(max_length=64)
    group = models.ForeignKey(Group)

g = Group.objects.get(id=1)
print g.user_set.all()  # prints list of all users in the group

请记住,Django 的模型位于关系数据库之上......无法在指向多个外键(即没有 M2M)的表中定义单个 FK 字段,因此将 ManyToOne Groups 对象上的关系不会映射到基础数据存储。如果您正在编写原始 SQL,那么在任何情况下都可以使用从用户表到组表的外键对这种关系进行建模,如果这样想有帮助的话。使用在 Group 实例上定义的 ManyToOne 属性的语法和逻辑(如果存在这样的概念)将比在 User 上定义的 ForeignKey 简单得多。

关于python - Django 中的多对一字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888550/

相关文章:

django - 如何在 Django Rest Framework 中更改 View 集检索响应?

python - 在 django 框架之外使用 django 模型

python - 无法使用 PyCharm 和 venv 导入 TF

python - 将带有字符串格式的url的DataFrame正确转换为JSON

python - 如何在 Django 管理自定义列中获取请求参数?

python - 如何识别我的 css 到我的 django 元素

python - Django 从模板输出中删除所有空行

python - 计算给定数字之前的奇数

python - 谁能解释一下Python中的函数闭包?

python - 如何将版本/构建信息添加到我的项目和 setup.py 中?