如何在一个应用程序中的两个模型之间建立反向关系?

时间:2019-04-16 15:31:28

标签: django django-models

如何在一个应用程序中使两个模型反向关联?

class User(AbstractUser):
    user_status = models.ForeignKey(Status)


class Status(models.Model):
    users = models.ManyToManyField(User, blank=True)

2 个答案:

答案 0 :(得分:2)

Django自动为您完成。因此,您不应将其指定为相关模型上的字段。

删除ManyToManyField上的Status。然后,如果您有Status对象,则可以使用status.user_set.all()引用反向关系。或者,您可以在related_name上添加ForeignKey,也可以使用自定义名称:

user_status = models.ForeignKey(Status, related_name="users", on_delete=models.SET_NULL, null=True, blank=True)

请注意,我添加了on_delete,因为这是Django 2.x的要求,它会强制您指定删除Status时的情况。

status = Status.objects.first()
status.users.all()  # all users for that status

答案 1 :(得分:0)

您可以使用status_set访问用户的状态:

user = User.objects.first()
user.status_set.all() # get all status of a user

您可以使用related_name参数为反向名称分配另一个名称:

class Status(models.Model):
    users = models.ManyToManyField(User, blank=True, related_name='states')


user = User.objects.first()
user.states.all()

Many to many official documentation