首页 > 解决方案 > Django查询多对多关系以查找用户

问题描述

这是我的模型:

class Student(models.Model):
   user = models.OneToOneField(User,on_delete=models.CASCADE)
   frist_name = models.CharField(max_length=250)
   last_name = models.CharField(max_length=250)
   father_name = models.CharField(max_length=250)
   national_code = models.CharField(max_length=12)
   date_of_birth = models.DateField()
   phone_regex = RegexValidator(regex=r'(\+98|0)?9\d{9}', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.",)
   phone_number = models.CharField(validators=[phone_regex], max_length=13, 
   blank=True,help_text='Do like +98913.......') # validators should be a list
   CHOICES = (
    ('male','Male'),
    ('female','Female')
   )
   gender = models.CharField(choices=CHOICES,max_length=6)
   date_created = models.DateTimeField(auto_now_add=True)

   def __str__(self):
       return (self.frist_name)


class Classes(models.Model):
   book = models.CharField(max_length=250)
   grade = models.CharField(max_length=250)
   teacher = models.ForeignKey(Teacher,on_delete=models.CASCADE)
   student = models.ManyToManyField(Student,related_name='student')
   date_created = models.DateTimeField(auto_now_add=True)

   def __str__(self):
       return self.grade

如何查询以查找特定学生的用户书和成绩?

例如:第一个名字是 mohammad,姓氏是 kavosi,用户名是 0605605605 我想找到这个用户的年级和书籍。

我的模型是否有效?

标签: pythondjango

解决方案


首先,您的“Classes”模型名称应该是单数的,可能类似于“Course”。然后在这个模型中,我看到它有一个“student”manytomanyfield,它的相关名称应该是学生模型用来指代“Course”的名称,因此相关名称应该是“courses”。

因此,您的“类”模型应如下所示:

class Course(models.Model):
   book = models.CharField(max_length=250)
   grade = models.CharField(max_length=250)
   teacher = models.ForeignKey(Teacher,on_delete=models.CASCADE)
   student = models.ManyToManyField(Student,related_name='courses')
   date_created = models.DateTimeField(auto_now_add=True)

   def __str__(self):
       return self.grade

要回答如何查找成绩和书籍的问题,因为学生可以在许多不同的课程中,您可以通过执行以下操作在学生 Jane Doe 的每门课程中获得相应的成绩和书籍:

student = Student.objects.get(first_name='Jane', last_name='Doe')
courses = student.courses.all()
grade_book_list = couses.values_list('book', 'grade')

推荐阅读