<p>我建议对此类用例使用<a href="https://www.django-rest-framework.org/api-guide/serializers/" rel="nofollow noreferrer">django-rest-framework serializers</a></p>
<pre class="lang-py prettyprint-override"><code>
from .models import Parent, Child
from rest_framework import serializers
### Define Serializers
class ParentSerializer(serializers.ModelSerializer):
class Meta:
model = Parent
fields = ['id', 'name']
class ChildSerializer(serializers.ModelSerializer):
parent = ParentSerializer()
class Meta:
model = Child
fields = ['id', 'name', 'parent']
def to_representation(self, instance):
# get representation from ModelSerializer
ret = super(ChildSerializer, self).to_representation(instance)
# if parent is None, overwrite
if not ret.get("parent", None):
ret["parent"] = {"id": None, "name": None}
return ret
### example serialization
childs = ChildSerializer(Child.objects.all(), many=True)
print(childs.data)
"""
Output:
[
{
"id": 1,
"name": "example child name",
"parent": {
"id": 1,
"name": "example parent name"
}
},
#...snip..
]
"""
</code></pre>