我的模型定义如下:
[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模型的数据。但我不知道我该怎么做?
答案 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')
Pizza
与Toppings
具有多对多关系的位置。