相关疑难解决方法(0)

Django休息框架,在同一个ModelViewSet中使用不同的序列化器

我想提供两种不同的序列化器,但能够从以下所有设施中受益ModelViewSet:

  • 在查看对象列表时,我希望每个对象都有一个重定向到其详细信息的URL,并且使用__unicode __目标模型显示每个其他关系;

例:

{
  "url": "http://127.0.0.1:8000/database/gruppi/2/",
  "nome": "universitari",
  "descrizione": "unitn!",
  "creatore": "emilio",
  "accesso": "CHI",
  "membri": [
    "emilio",
    "michele",
    "luisa",
    "ivan",
    "saverio"
  ]
}
Run Code Online (Sandbox Code Playgroud)
  • 查看对象的详细信息时,我想使用默认值 HyperlinkedModelSerializer

例:

{
  "url": "http://127.0.0.1:8000/database/gruppi/2/",
  "nome": "universitari",
  "descrizione": "unitn!",
  "creatore": "http://127.0.0.1:8000/database/utenti/3/",
  "accesso": "CHI",
  "membri": [
    "http://127.0.0.1:8000/database/utenti/3/",
    "http://127.0.0.1:8000/database/utenti/4/",
    "http://127.0.0.1:8000/database/utenti/5/",
    "http://127.0.0.1:8000/database/utenti/6/",
    "http://127.0.0.1:8000/database/utenti/7/"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我设法按照以下方式完成所有这些工作:

serializers.py

# serializer to use when showing a list
class ListaGruppi(serializers.HyperlinkedModelSerializer):
    membri = serializers.RelatedField(many = True)
    creatore = serializers.RelatedField(many = False)

    class Meta:
        model = models.Gruppi

# serializer …
Run Code Online (Sandbox Code Playgroud)

django serialization django-rest-framework

165
推荐指数
6
解决办法
6万
查看次数

DRF 在“list”和“get_object”上显示不同的字段

我正在使用这样的视图集:

class UserViewSet(viewsets.ModelViewSet):
    """Viewset for model User."""

    queryset = User.objects.all()
    serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)

我的序列化器有以下字段:

fields = ('id', 'url', 'username', 'first_name', 'middle_name', 'last_name', 'role',
          'get_role_display', 'is_authenticated', 'is_staff', 'is_superuser', )
Run Code Online (Sandbox Code Playgroud)

当我访问 api 以列出具有此 url 的所有用户时/api/user/,它返回此 json_data:

[
{
    "id": 1,
    "url": "http://127.0.0.1:8000/api/user/1/",
    "username": "admin",
    "first_name": "",
    "middle_name": null,
    "last_name": "",
    "role": "A",
    "get_role_display": "Admin",
    "is_authenticated": true,
    "is_staff": true,
    "is_superuser": true
},
{
    "id": 2,
    "url": "http://127.0.0.1:8000/api/user/2/",
    "username": "7004104463",
    "first_name": "Vaibhav",
    "middle_name": "Bold",
    "last_name": "Vishal",
    "role": "S",
    "get_role_display": "Student",
    "is_authenticated": true, …
Run Code Online (Sandbox Code Playgroud)

python django python-3.x django-rest-framework

4
推荐指数
1
解决办法
2384
查看次数