假设我有一些模型:
class A(models.Model):
...
class B(models.Model):
my_reference_to_a = models.ForeignKey(A)
b_field_1 = ...
b_field_2 = ...
class C(models.Model):
my_reference_to_b = models.ForeignKey(B)
c_field_1 = ...
...
在我的C
序列化程序中,我希望包含C
中的所有字段、B
的所有字段,以及B
对A
(但不包括C
内对m1on5o1p)的引用,因此JSON API输出如下所示:
{
"data": [{
"type": "C",
"id": "1",
"attributes": {
"b_field_1": "...",
"b_field_2": "...",
"c_field_1": "..."
},
"relationships": {
"a": {
"data": {
"type": "A",
"id": "1"
}
}
}
}],
...
}
我该怎么办?我已经在C
的序列化程序中尝试过这样的操作:
A = ASerializer(source='my_reference_to_b.my_reference_to_a')
但这不起作用,因为DRF似乎不支持源的虚线路径。我还尝试过提供一个方法,该方法返回正确的模型(模型在方法中有效)作为源,但将JSON中的引用输出为:
"a": {
"data": null
}
在我的A
模型上,我还引用了另一个模型D
,该模型在A
中没有明确声明,而是在m1n 11o1p中将其定义为一对多关系(多个D
模式到一个m1n 13o1p模型),其中ForeignKey上的resource_name声明为D
,任何一个我得到了这个错误(试图通过执行D = DSerializer(source='B.D')
引用它):
'RelatedManager' object has no attribute 'B'
任何帮助都将不胜感激。
2条答案
按热度按时间xam8gpfp1#
我想出来了。只是回答我自己的问题,以防有人登陆本页,他们需要帮助。
您需要使用Django Rest Framework JSON API中的
SerializerMethodResourceRelatedField
。我尝试了常规的ResourceRelatedField
,但没有成功,通过查看源代码,我发现ResourceRelatedField
不支持虚线路径。相反,使用SerializerMethodResourceRelatedField
,源指向返回所需关系的方法。qvtsj1bj2#