相关疑难解决方法(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万
查看次数

如何使用Django Rest Framework为列表和详细信息视图设置不同的Serializer?

在使用viewsets.ModelViewSet和时,HyperlinkedSerializer如何为列表和详细信息视图设置不同的序列化程序 ?

我看到如何viewsets.ViewSet通过定义listretrive(这是一个例子)来做到这一点,但我不知道如何优雅地适应它viewsets.ModelViewSet

django django-rest-framework

16
推荐指数
1
解决办法
6944
查看次数

django rest framework隐藏列表显示中的特定字段?

我想在列表显示中隐藏模型的特定字段,persons/并显示详细信息显示上的所有字段persons/jane

我对其余框架相对较新,文档感觉很难掌握.

这就是我想要实现的目标.

我有一个简单的Person模型,

# model
class Person(models.Model):
    first_name = models.CharField(max_length=30, blank=True)
    last_name = models.CharField(max_length=30, blank=True)
    nickname = models.CharField(max_length=20)
    slug = models.SlugField()
    address = models.TextField(max_length=300, blank=True)
Run Code Online (Sandbox Code Playgroud)

和序列化器类

# serializers

class PersonListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('nickname', 'slug')


class PersonSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('first_name', 'last_name', 'nickname', 'slug', 'address')
Run Code Online (Sandbox Code Playgroud)

和视图集.

# view sets (api.py)

class PersonListViewSet(viewsets.ModelViewSet):
    queryset = Person.objects.all()
    serializer_class = PersonListSerializer


class PersonViewSet(viewsets.ModelViewSet):
    queryset = Person.objects.all()
    serializer_class = PersonSerializer …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

9
推荐指数
4
解决办法
7805
查看次数