我需要获取Foreignkey字段的值,而不是获取ID,而是获取链接模型的字段之一的值。
models.py
class RfiParticipation(models.Model):
...
vendor = models.ForeignKey('Vendors', models.DO_NOTHING, related_name='to_vendor')
m = models.ForeignKey('Modules', models.DO_NOTHING, related_name='to_modules')
...
class Modules(models.Model):
MODULES_NAME = (....
)
mid = models.AutoField(primary_key=True)
module_name = models.CharField(max_length=50, choices=MODULES_NAME, unique=True)
serializer.py
class VendorsManagementListSerializer(serializers.ModelSerializer):
company_information = serializers.SerializerMethodField()
vendor_modules = serializers.SerializerMethodField()
class Meta:
model = Vendors
fields = ('vendor_name',
...
'company_information',
'vendor_modules',)
def get_vendor_modules(self, obj):
r = RfiParticipation.objects.filter(vendor=obj).order_by('rfi').values('m', 'rfi')
return r
现在,此请求r = RfiParticipation.objects.filter(vendor=obj).order_by('rfi').values('m', 'rfi')
返回给我:
"vendor_modules": [
{
"m": 2,
"rfi": "20R1"
},
{
"m": 3,
"rfi": "20R1"
},
{
"m": 4,
"rfi": "20R1"
}
]
如何制作m: module_name
而不是m: 2
?其中module_name
是“模块”模型中的字段。
我尝试.values('m.module_name', 'rfi')
但得到了
Cannot resolve keyword 'm.module_name' into field. Choices are: active, id, m, m_id, rfi, rfi_id, timestamp, user_id, vendor, vendor_id
答案 0 :(得分:1)
您可以在此处使用SlugRelatedField
。例如:
class RFISerializer(serializers.ModelSerializer):
to_modules = serializers.SlugRelatedField(
many=True,
read_only=True,
slug_field='module_name'
) # using to_modules as it was used as related field
class Meta:
model = RfiParticipation
fields = ['rfi', 'to_modules']
class VendorsManagementListSerializer(serializers.ModelSerializer):
vendor_modules = RFISerializer(source='m')
class Meta:
model = Vendors
fields = ('vendor_name',
...
'vendor_modules',)
答案 1 :(得分:0)
好的决定
r = RfiParticipation.objects.filter(vendor=obj).order_by('rfi').values(module=F('m__module_name'), round=F('rfi'))