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