我们说我有一些模特:
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
中的所有字段以及A
中的B
引用B
(但不是C
中对{
"data": [{
"type": "C",
"id": "1",
"attributes": {
"b_field_1": "...",
"b_field_2": "...",
"c_field_1": "..."
},
"relationships": {
"a": {
"data": {
"type": "A",
"id": "1"
}
}
}
}],
...
}
的引用),因此JSON API输出将是这样的:
C
我该怎么做?我已经尝试在A = ASerializer(source='my_reference_to_b.my_reference_to_a')
的序列化程序中执行类似的操作:
"a": {
"data": null
}
但这并不起作用,因为DRF似乎不支持源的虚线路径。我还尝试提供一个返回正确模型的方法(模型在方法内部有效)作为源,但是它将JSON中的引用输出为:
A
在我的D
模型上,我还引用了另一个模型A
,该模型未在D
中明确说明,而是在D
中定义为一个OneToMany关系(许多A
模型到一个D
模型),在C
中声明的ForeignKey上有一个resource_name,并试图在D = DSerializer(source='B.D')
中引用它以包含该关系JSON也不起作用。我收到此错误(尝试通过执行'RelatedManager' object has no attribute 'B'
来引用它):
public activeUser = new BehaviorSubject(null);
非常感谢任何帮助。
答案 0 :(得分:0)
我明白了。如果有人登陆此页面并且需要帮助,请回答我自己的问题。
您需要使用Django Rest Framework JSON API中的SerializerMethodResourceRelatedField。我没有尝试过常规的ResourceRelatedField,查看源代码向我展示了ResourceRelatedField不支持虚线路径。而是使用SerializerMethodResourceRelatedField,其源代码指向返回所需关系的方法。