ForiegnKey字段序列化程序在Django Rest框架 [英] ForiegnKey field serializer in Django Rest framework

查看:284
本文介绍了ForiegnKey字段序列化程序在Django Rest框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在发布此问题之前,我已经阅读了关于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 of PrimaryKeyRelatedField.

Hope that helps.

这篇关于ForiegnKey字段序列化程序在Django Rest框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆