美文网首页
django 一对多关系结果查询

django 一对多关系结果查询

作者: amyhy | 来源:发表于2017-09-13 18:55 被阅读85次

    我先定义两个模型,一个是问题,一个是选项,一个问题可以有多个选项。一对多的类型。

    class Question(models.Model):
        question_text = models.CharField(max_length=200)
        pub_date = models.DateTimeField('date published')
    
        class Meta:
            db_table = 'question'
    
        def __str__(self):
            return self.question_text
    
    
    class Choice(models.Model):
        question = models.ForeignKey(Question)
        choice_text = models.CharField(max_length=200)
        votes = models.IntegerField(default=0)
    
        class Meta:
            db_table = 'choice'
    
        def __str__(self):
            return self.choice_text
    

    我们要查询某个问题下有哪些选项可以用
    先查询到问题的信息

    question = get_object_or_404(Question, 筛选条件)
    

    返回一个question对象

    接下来就查询question关联的所有选项对象
    choice = question.choice_set.all()
    django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。
    这个属性的名称默认是以子表的名称小写加上_set()来表示,默认返回的是一个querydict对象,你可以继续的根据情况来查询等操作。

    如果你觉得上面的定义比较麻烦的话,你也可以在定义主表的外键的时候,给这个外键定义好一个名称。要用related_name比如:

    question = models.ForeignKey(Question, related_name='question_set')
    

    那么上面的话:choice = question.choice_set.all()
    也可以用choice = question.question_set.all()

    上面的是查询是通过主表来查询子表的信。

    下面我简单的说下通过子表来查询主表的信息。

    假设需要查询一个选项对应的的信息,那我可以通过下面的步骤来实现:

    假如我先得到了一个子表的对象。那我只要获取该对象关联主表的外键的熟悉,就可以得到主表的信息了。
    比如得到一个choice对象,然后我想得到choice对象的主表question的信息的话:
    p =choice.question

    相关文章

      网友评论

          本文标题:django 一对多关系结果查询

          本文链接:https://www.haomeiwen.com/subject/vyelsxtx.html