逆Django查找过滤

时间:2019-07-09 17:01:00

标签: django django-models

所以我有两个模型:

class Member(models.Model):
    course_member = models.ForeignKey(CourseMember, on_delete=models.CASCADE

class CourseMember(models.Model):
    name = models.CharField(max_length=30)

如何获得具有2个或更多成员的所有CourseMembers?

而且,如何阻止CourseMember具有超过1个成员。

我当时正在考虑使用“聚合”和“分组依据”,但是我不确定该怎么做。

1 个答案:

答案 0 :(得分:1)

  

如何获得具有2个或更多成员的所有CourseMembers?

您可以为此使用注释,并且这样做是比较容易的,例如,将“ related_name”添加到“ Member”的“ course_member”字段中:course_member = models.ForeignKey(CourseMember, related_name='coursemember_member', on_delete=models.CASCADE)您可以进行反向查找以从父表中引用子表并这样注释:CourseMember.objects.annotate(Count('coursemember_member')).filter(coursemember_member__count__gt=1)这将给您想要的结果。

  

而且,如何阻止CourseMember具有超过1个成员。

这可以在ORM /数据库级别或程序级别实现,要在ORM级别实现,您可以使course_member一对一关系而不是像course_member = models.OneToOneField(CourseMember, on_delete=models.CASCADE)这样的多对一关系数据库如果您尝试使用相同的course_member插入多行,则抛出异常,否则可以在程序级别通过检查是否存在具有相同course_member的行(如果存在)来处理它。