在不增加 Django Rest Framework 深度的情况下获取数据
Get data without increasing depth in Django Rest Framework
在我的 Django 应用程序中,我正在获取相关字段的“pk”值,我想用一些其他字段的组合替换它
Json:
{
"transaction_no": 2321,
"dispatch_date": "2020-08-01T09:19:37Z",
"send_from_warehouse": "ABC",
"model": "Rent",
"vehicle_number": "__________",
"transport_by": "Market Transport Vendor",
"is_delivered": false,
"sales_order": {
"owner": "2"
}
},
要用 first_name
替换 2
我尝试了 SlugRelatedField
如下所示:
Serializers.py
class AtableSOSerializer(serializers.ModelSerializer):
owner = serializers.SlugRelatedField(read_only=True, slug_field='first_name')
class Meta:
model = MaterialRequest
fields = ('owner',)
class AllotmentTableSerializer(serializers.ModelSerializer):
sales_order = AtableSOSerializer(read_only=True)
send_from_warehouse = serializers.SlugRelatedField(read_only=True, slug_field='name')
transport_by = serializers.SlugRelatedField(read_only=True, slug_field='name')
class Meta:
model = Allotment
fields = ('transaction_no', 'dispatch_date', 'send_from_warehouse', 'model', 'vehicle_number', 'transport_by',
'is_delivered', 'sales_order')
我得到了 first_name
Json:
{
"transaction_no": 2321,
"dispatch_date": "2020-08-01T09:19:37Z",
"send_from_warehouse": "Yantraksh Logistics Private limited_GGNPC1",
"model": "Rent",
"vehicle_number": "__________",
"transport_by": "Market Transport Vendor",
"is_delivered": false,
"sales_order": {
"owner": "Foo"
}
},
但是如何在 owner
字段中获得 first_name
+ last_name
的组合?
这里owner
是用户相关字段
使用serializers.SerializerMethodField
--(DRF doc)作为,
class AtableSOSerializer(serializers.ModelSerializer):
<b>owner = serializers.SerializerMethodField()
def get_owner(self, instance):
return "%s %s" % (instance.owner.first_name, instance.owner.last_name)</b>
class Meta:
model = MaterialRequest
fields = ('owner',)
在我的 Django 应用程序中,我正在获取相关字段的“pk”值,我想用一些其他字段的组合替换它
Json:
{
"transaction_no": 2321,
"dispatch_date": "2020-08-01T09:19:37Z",
"send_from_warehouse": "ABC",
"model": "Rent",
"vehicle_number": "__________",
"transport_by": "Market Transport Vendor",
"is_delivered": false,
"sales_order": {
"owner": "2"
}
},
要用 first_name
替换 2
我尝试了 SlugRelatedField
如下所示:
Serializers.py
class AtableSOSerializer(serializers.ModelSerializer):
owner = serializers.SlugRelatedField(read_only=True, slug_field='first_name')
class Meta:
model = MaterialRequest
fields = ('owner',)
class AllotmentTableSerializer(serializers.ModelSerializer):
sales_order = AtableSOSerializer(read_only=True)
send_from_warehouse = serializers.SlugRelatedField(read_only=True, slug_field='name')
transport_by = serializers.SlugRelatedField(read_only=True, slug_field='name')
class Meta:
model = Allotment
fields = ('transaction_no', 'dispatch_date', 'send_from_warehouse', 'model', 'vehicle_number', 'transport_by',
'is_delivered', 'sales_order')
我得到了 first_name
Json:
{
"transaction_no": 2321,
"dispatch_date": "2020-08-01T09:19:37Z",
"send_from_warehouse": "Yantraksh Logistics Private limited_GGNPC1",
"model": "Rent",
"vehicle_number": "__________",
"transport_by": "Market Transport Vendor",
"is_delivered": false,
"sales_order": {
"owner": "Foo"
}
},
但是如何在 owner
字段中获得 first_name
+ last_name
的组合?
这里owner
是用户相关字段
使用serializers.SerializerMethodField
--(DRF doc)作为,
class AtableSOSerializer(serializers.ModelSerializer):
<b>owner = serializers.SerializerMethodField()
def get_owner(self, instance):
return "%s %s" % (instance.owner.first_name, instance.owner.last_name)</b>
class Meta:
model = MaterialRequest
fields = ('owner',)