django 一对多关系结果查询

2017-09-13  本文已影响85人  amyhy

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

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

上一篇下一篇

猜你喜欢

热点阅读