ForiegnKey字段序列化程序在Django Rest框架 [英] ForiegnKey field serializer in Django Rest framework
问题描述
在发布此问题之前,我已经阅读了关于SOF的几个问题。但是他们从2012年开始也很混乱。
,例如 Django Rest Framework - 获取相关模型字段在序列化器中
我的问题很简单
models.py
class User(models.Model):
username = models.CharField(max_length = 100,unique = True)
密码= models.CharField(max_length = 100,null = False,blank = False)
class Car(models.Model):
user = models.ForeignKey(User)
car_name = models.CharField(max_length = 100,null = True,blank = True)
serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields =('username','password')
class CarSerializer(serializers.ModelSerializer):
#user =?我应该写什么或有更好的方法序列化汽车对象
class Meta:
model = Car
fields =('user','car_name')
views.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class CarViewSet(viewsets.ModelViewSet):
queryset = Car .objects.all()
serializer_class = CarSerializer
请建议所有可能的方法。 p>
1个查询。哪一个更好的是 ModelSerializer
或 HyperlinkModelSerializer
。当我看到包含这两个不同的答案。
你只需要做:
code> class CarSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = Car
fields =('user','car_name' )
此外,您应该查看 serializers.Field
和序列化程序的善意.SerializerMethodField
,您可以与他们一起玩,并根据需要自定义您的响应数据。
关于 HyperlinkedModelSerializer
- ModelSerializer
非常清楚 here :
HyperlinkedModelSerializer
与 ModelSerializer
有以下区别:
- 默认情况下不包含pk字段。
- 它包含一个url字段,使用
超链接IDentityField
。 - 关系使用
HyperlinkedRelatedField
,而不是PrimaryKeyRelatedField
。
希望有所帮助。
Before posting this question I've read few questions on SOF. but they are from 2012 and very confusing as well. for e.g Django Rest Framework - Get related model field in serializer
my question is very straight forward
models.py
class User(models.Model):
username = models.CharField(max_length=100,unique=True)
password = models.CharField(max_length=100,null=False,blank=False)
class Car(models.Model):
user = models.ForeignKey(User)
car_name = models.CharField(max_length=100,null=True,blank=True)
serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username','password' )
class CarSerializer(serializers.ModelSerializer):
#user = ?? what should I write or is there any better approach for serializing Car objects
class Meta:
model = Car
fields = ('user','car_name')
views.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class CarViewSet(viewsets.ModelViewSet):
queryset = Car.objects.all()
serializer_class = CarSerializer
Please suggest all possible approaches.
1 more query. which one is better ModelSerializer
or HyperlinkModelSerializer
. as I saw different different answers containing these two.
You just need to do:
class CarSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = Car
fields = ('user','car_name')
that is all.
Also, you should take a look to the kindnesses of serializers.Field
and serializers.SerializerMethodField
, you can play with them and customize your response data as much as you wish.
As to the question around HyperlinkedModelSerializer
-ModelSerializer
, very clear here:
The HyperlinkedModelSerializer
has the following differences from ModelSerializer
:
- It does not include the pk field by default.
- It includes a url field, using
HyperlinkedIdentityField
. - Relationships use
HyperlinkedRelatedField
, instead ofPrimaryKeyRelatedField
.
Hope that helps.
这篇关于ForiegnKey字段序列化程序在Django Rest框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!