一对多领域Django Rest Framework

时间:2020-07-10 18:01:10

标签: django django-models django-rest-framework django-serializer

我是DRF和django的新手,看到了有关序列化程序关系的DRF文档,但仍然不能解决我的问题。

我有以下两种模型:

class Estabelecimento(models.Model):
    endereco = models.ForeignKey(Endereco, related_name='estabelecimento_endereco', on_delete=models.SET_NULL, null=True)
    nome = models.CharField(max_length=32)
    telefone = models.CharField(max_length=11)
    email = models.EmailField()
    cnpj = models.CharField(max_length=14)
    imagem = models.CharField(max_length=128)
    horario_atendimento = models.CharField(max_length=32)
    aberto = models.BooleanField()
    ativo = models.BooleanField(default=True) 

class Usuario(models.Model):
    estabelecimento = models.ForeignKey(Estabelecimento, related_name='usuario_estabelecimento', on_delete=models.SET_NULL, null=True)
    endereco = models.ForeignKey(Endereco, related_name='usuario_endereco', on_delete=models.SET_NULL, null=True)
    nome = models.CharField(max_length=32)
    sobrenome = models.CharField(max_length=32)
    email = models.EmailField()
    cpf = models.CharField(max_length=11)
    password = models.CharField(max_length=64)
    role = models.CharField(max_length=12)
    ativo = models.BooleanField(default=True)

这些有序列化器:

class EstabelecimentoSerializer(serializers.ModelSerializer):

    pedidos = pedido_serializer.PedidoSerializer(many=True, read_only=True)
    usuarios = usuario_serializer.UsuarioSerializer(many=True, read_only=True)

    class Meta:
        model = models.Estabelecimento
        fields = ('id', 'nome', 'telefone', 'email', 'cnpj', 'imagem', 'horario_atendimento',
                 'aberto', 'ativo', 'endereco', 'pedidos', 'usuarios',)
        read_only_fields = ('id',)

class UsuarioSerializer(serializers.ModelSerializer):

    pedidos = pedido_serializer.PedidoSerializer(many=True, read_only=True)

    class Meta:
        model = models.Usuario
        fields = ('id', 'nome', 'sobrenome', 'email', 'cpf', 'password',
                 'role', 'ativo', 'estabelecimento', 'endereco', 'pedidos',)
        read_only_fields = ('id',)

我想要的结果将是这样的(来自DRF文档的示例):

{
    'album_name': 'Things We Lost In The Fire',
    'artist': 'Low',
    'tracks': [
        '1: Sunflower',
        '2: Whitetail',
        '3: Dinosaur Act',
        ...
    ]
}

“ Estabelecimento”应该在“ estabelecimento” JSON中包含“ usuarios”列表,但是“ usuarios”甚至不会出现在JSON中。不知道我在做什么错。

0 个答案:

没有答案