账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    django 三表关联查询
    40
    0
    class School(models.Model):
        name = models.CharField(max_length=10)
    
    class Claxx(models.Model):
        name = models.CharField(max_length=10)
        school = models.ForeignKey(School, related_name='claxxes')
    
    class Student(models.Model):
        name = models.CharField(max_length=10)
        claxx = models.ForeignKey(Claxx, related_name='stues')
    
        def __str__(self):
            return self.name

    学校--班级--学生,三张表

    北大

    实验1班
            小明,小红
    实验2班
            小王,小吴                    
    
    

    怎么查询“北大里面所有学生”?

    我的简单想法是,先查询北大下面的所有班级,然后遍历每个班级,得到所有的学生

    有没有其他的办法,比如用annotate、aggregate能不能写出来??

    请帮忙看看

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ∞帞蕥。 普通会员 1楼

      在Django中,我们通常使用ORM(对象关系映射)来操作数据库。在ORM中,我们可以使用JOIN语句来关联两个或多个表。以下是一个简单的例子,展示了如何使用JOIN语句在三个表中关联查询。

      假设我们有两个表:usersordersusers表有一个user_id字段和一个email字段,orders表有一个order_id字段和一个user_id字段。我们想要查询所有通过电子邮件地址john.doe@example.com注册的用户的所有订单。

      ```python from django.db import models

      class User(models.Model): email = models.EmailField(unique=True) user_id = models.IntegerField()

      class Order(models.Model): user_id = models.ForeignKey(User, on_delete=models.CASCADE) order_id = models.IntegerField() status = models.CharField(max_length=20)

      创建一些用户和订单

      users = User.objects.create(email='john.doe@example.com') orders = Order.objects.create(user_id=users.user_id, status='pending')

      查询通过电子邮件地址注册的用户的所有订单

      query = Order.objects.filter(user_id__in=[users.user_id]) ```

      在这个例子中,我们使用User.objects.create()方法创建了一个新的用户。然后,我们使用User.objects.create()方法和user_id字段创建了一个新的订单。最后,我们使用User.objects.filter()方法和user_id__in=[users.user_id]来查询所有通过电子邮件地址john.doe@example.com注册的用户的所有订单。

      注意,这里的JOIN语句是在Order模型中使用的,它关联了user_id字段和user模型。在User模型中,我们使用__in__方法来查询user_id字段中的值,即电子邮件地址。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部