我是Django的新手,无法找到问题的解决方案.
问题是在使用不同视图的情况下强制特定的序列化器包括不同数量的字段.我想在第一个视图中使用’id’字段,在第二个视图中使用’id’和’name’字段.
这是我的model.py
class Processing(models.Model): id = models.AutoField(primary_key=True) name = models.CharField() description = models.CharField()
这是我的serializer.py
class ProcessingSerializer(serializers.ModelSerializer): id = serializers.ModelField(model_field=Processing()._Meta.get_field('id')) class Meta: model = Processing fields = ('id','name')
欢迎任何帮助.
解决方法
当有人刚开始使用DRF时,一个常见的错误就是尝试让同一个Serializer在阳光下做所有事情.当然,我自己走了那条路.
但是当您使用多个序列化程序执行不同的任务时,生活变得更加简单.您可以使用get_serializer_class方法轻松切换序列化程序.以下是手册中的一个示例,其中显示了如何将一个用于管理员而另一个用于普通用户
def get_serializer_class(self): if self.request.user.is_staff: return FullAccountSerializer return BasicAccountSerializer
有时您希望在列表中使用单个序列化程序,在提供详细信息时使用另一个序列化程序.尝试这样的事情:
def get_serializer_class(self): if self.action == 'retrieve': return serializers.PlayerDetailSerializer else : return serializers.PlayerSerializer
生活这种方式简单得多.