Поле «один ко многим» Django Rest Framework - PullRequest
0 голосов
/ 10 июля 2020

Я новичок в 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" должен иметь список «usuar ios» в «installelecimento» JSON, но «usuar ios» даже не появляется в JSON. Не знаю, что делаю не так.

...