我来自Rails背景,并且在使用Django中提供的“关联方法”时遇到了一些麻烦。我有两个模型(为简洁起见而简化),如下:
class User(models.Model):
username = models.CharField(max_length=100, unique=True)
companies = models.ManyToManyField('Company', blank=True)
class Company(models.Model):
name = models.CharField(max_length=255)
根据Django文档:
“哪个模型具有ManyToManyField并不重要,但您只应将其放在其中一个模型中 - 而不是两者。”。
所以我理解,如果我有一个名为user的用户实例,我可以这样做:
user.companies
我的问题是如何反过来?如何获取属于公司实例的所有用户,例如公司:
company.users # This doesn't work!
这样做的惯例是什么?我读过的文档并没有真正涵盖这一点。我需要关联工作两种方式,所以我不能简单地将它从一个模型移动到另一个模型。
答案 0 :(得分:67)
company.user_set.all()
将返回属于特定公司的User
个对象的QuerySet。默认情况下,您使用modelname_set
来反转关系,但您可以在定义模型时覆盖此项,即提供related_name
作为参数,即
class User(models.Model):
companies = models.ManyToManyField(User, ..., related_name="users")
> company.users.all()