所以我有两个模型:
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个成员。
我当时正在考虑使用“聚合”和“分组依据”,但是我不确定该怎么做。
答案 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的行(如果存在)来处理它。