如何在一个查询中两次使用反向外键关系

时间:2017-11-02 21:18:09

标签: python django

我的模型定义如下:

[DataContract]
public class ProjectInfoDto
{
    [DataMember(Name = "BeginDate")]
    private string beginDate;

    [DataMember(Name = "ExecutieDataFinal")]
    private string finalDate;

    [DataMember]
    public long ProjectId { get; set; }

    [DataMember]
    public string ProjcetCode { get; set; }

    public DateTime BeginDate { get; set; }

    public DateTime FinalDate { get; set; }

    [OnSerializing]
    void OnSerializing(StreamingContext context)
    {
        beginDate = BeginDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
        finalDate = FinalDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
    }
}

我正在为模型A创建一个RESTful Web服务,我有一个定义为

的查询集
class A(models.Model):
    name_a = models.CharField()

class B(models.Model):
    a = models.ForeignKey(A, related_name='aa')
    name_b = models.CharField()

class C(models.Model):
    b = models.ForeignKey(B, related_name='bb')
    name_c = models.CharField()

但我也想要C模型的数据。但我不知道我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用双下划线遍历关系:

queryset = A.objects.prefetch_related('aa','aa__bb').all()

如果不使用相关名称,它会变得更清晰:

class A(models.Model):
    name = models.CharField()

class B(models.Model):
    a = models.ForeignKey(A)
    name = models.CharField()

class C(models.Model):
    b = models.ForeignKey(B)
    name = models.CharField()

A.prefetch_related('b_set','b_set__c_set').all()

documentation的示例:

>>> Restaurant.objects.prefetch_related('pizzas__toppings')

PizzaToppings具有多对多关系的位置。