![](/img/trans.png)
[英]How to get foreignkey field name instead of id in django rest framework
[英]Django Rest framework, how to include '__all__' fields and a related field using foreignkey_id field
这是我的文件-Models.py
class Model1(models.Model):
user = models.ForeignKey(User)
other_fields = models.CharField(max_length=40)
Serializers.py
class MySerializer(ModelSerializer):
class Meta:
model = Model1
fields = '__all__'
Here json request
{"user_id":1, "other_fields":"details"}
并在views.py中
serializer = MySerializer(data=request.data)
serializer.data
**Throws keyerror "user"**
当我尝试将请求参数“ user_id”更改为“ user”时,它对我有用。 但是我不能更改请求json。 有什么办法可以在序列化程序中解决此问题?
我可以将所有字段都设置为_all_ ,但是由于字段数量很多,这不是一个好的解决方案。
我也尝试过-
class MySerializer(ModelSerializer):
user = serializers.CharField(source='user_id')
class Meta:
model = Model1
fields = '__all__'
但这对我没有用。
我假设您正在使用viewset
类作为视图。 然后这将工作
覆盖__init__
方法为,
class MySerializer(ModelSerializer):
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if 'view' in self.context and self.context['view'].action in ['create', 'update', 'partial_update']: self.fields['user_id'] = self.fields.pop('user')
class Meta:
model = Model1
fields = '__all__'
['create', 'update', 'partial_update']
是viewset
类的actions
,它们分别表示HTTP POST , HTTP PUT和HTTP PATCH 。
class MySerializer(ModelSerializer):
def to_internal_value(self, data):
data = data.copy() # incase request data is immutable
data['user'] = data['user_id']
return super().to_internal_value(data)
user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
class Meta:
model = Model1
fields = '__all__'
这应该允许有效载荷:
{"user_id": 1, "other_fields": "details"}
尝试这个:
class MySerializer(ModelSerializer):
user_id = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), source='user', write_only=True)
class Meta:
model = Model1
fields = '__all__'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.