【发布时间】:2018-02-23 03:29:40
【问题描述】:
问题如下:在下面的代码中我有一个PreguntaSerializer。如果我发布这样的 JSON,它现在是编码的:
{
"categoria_pregunta": 1,
"titulo": "Pregunta de Prueba",
"descripcion": "Esta es la pregunta que mando por Postman",
"persons": [1, 3, 5, 3050]
}
一切正常,但是当我检索数据时,我得到了categoria_pregunta 和persons,这与我发布它们的方式相同(分别为 int 和 array)。我希望能够使用Categoria_preguntaSerializer 和PersonForPreguntaSerializer 获取这些字段,但如果我在PreguntaSerializer 中更改categoria_pregunta 和persons 以用于它们各自的序列化程序,则在发布之前提到的JSON 时会出现错误。
有没有办法可以将相同的PreguntaSerializer 用于两个操作,或者我应该将GET 和POST 的视图分开并使用不同的序列化程序?
models.py
class Categoria_pregunta(models.Model):
nombre = models.CharField(
'Descripcion', null=True, blank=True, max_length=150, default='')
status = models.IntegerField(
'Estado', null=True, blank=True, choices=STATUS_CHOICES)
class Pregunta(models.Model):
titulo = models.CharField(max_length=200, null=False, blank=False, default='')
descripcion = models.TextField(null=False, blank=False)
categoria_pregunta = models.ForeignKey(
Categoria_pregunta, null=True, blank=False, max_length=20)
usuario = models.ForeignKey(User, null=True, blank=False, max_length=20)
persons = models.ManyToManyField(Person, blank=False, max_length=20)
class Person(models.Model):
name = models.CharField('Nombre', null=True,
blank=False, max_length=1000, default='')
lastname = models.CharField(
'Apellido', null=True, blank=False, max_length=1000, default='')
...
serializers.py
class Categoria_preguntaSerializer(serializers.ModelSerializer):
class Meta:
model = Categoria_pregunta
fields = ('id', 'nombre',)
class PersonForPreguntaSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = ('id', 'name', 'lastname')
class PreguntaSerializer(serializers.ModelSerializer):
usuario = UserSerializer(read_only=True)
categoria_pregunta = serializers.PrimaryKeyRelatedField(queryset=Categoria_pregunta.objects.all())
persons = serializers.PrimaryKeyRelatedField(many=True, queryset=Person.objects.all())
class Meta:
model = Pregunta
exclude = ('status', )
views.py
class ListaPregunta(ListCreateAPIView):
queryset = Pregunta.objects.all().order_by('-id')
serializer_class = PreguntaSerializer
【问题讨论】:
-
您可以添加您的
views.py吗?
标签: python django serialization django-rest-framework