python - 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 我想找到这个用户的年级和书籍。
我的模型是否有效?
解决方案
首先,您的“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')
推荐阅读
- hadoop - tez shuffle 处理程序设置后失败:映射运算符初始化失败
- snowflake-cloud-data-platform - 雪花中的一流对象是什么意思?
- c++ - 如何在 C++ 中的同一程序中对 2D 字符串数组进行流式处理,然后对 2D 字符串数组进行流式处理。这是我写的代码。我是首发
- amazon-web-services - AWS Lambda C# - 通过其 vpc 端点调用 lambda
- kernel - 有没有办法调试softirq?
- swift - 为什么我不能在 struct 的属性初始化程序中使用实例成员,但 Apple 可以?
- java - 在 spring webflux 中添加 javax 验证以映射类型请求正文
- c# - USB VID 和 PID 表单文本框
- python - 如何在我的网络爬虫中实现多线程?
- azure-devops - 如何使用 Azure DevOps 在 Azure windows VM 上运行保存在 txt 文件中的 certutil 命令并将输出从 VM 复制到 ADO 或本地计算机