Executando verificação de segurança...
1

[Dúvida] Campos adicionais em tabelas intermediárias ManyToMany no Django

Alguém por aqui tem experiência com Django?

Estou com um problema bem peculiar... Tenho uma tabela intermediária entre usuários e permissões. Porém, além dos IDs de ambos os models, eu tenho um campo adicional, que é o campo do ID do cliente. As colunas ficam então: users_permissions: id, user_id, permission_id, client_id.

Pela documentação, descobri o parâmetro through_defaults, que é usado para passar os valores extras dos campos adicionais em relacionamentos ManyToMany. Porém, minha situação é a seguinte:

Não estou conseguindo criar dois objetos no banco para IDs de clientes diferentes.
Se eu tento criar, por exemplo, user_id = 1, permission_id = 56 e client_id = 1 ele funciona normalmente. Se eu tentar criar outro, user_id = 1, permission_id = 56 e client_id = 2, ele não funciona. Não cria, não aponta erros, nada. Continua o fluxo normal como se nada tivesse acontecido.

Eu criei uma constraint no model para não permitir duplicados, mas a constraint é apenas para quando os 3 campos são iguais.

class UsersPermissions(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='ID Usuário')
    permission = models.ForeignKey(Permission, on_delete=models.CASCADE, verbose_name='ID Permissão')
    client = models.ForeignKey(Client, on_delete=models.CASCADE, verbose_name='ID Cliente')


    class Meta:
        db_table = 'users_permissions'
        constraints = [
            UniqueConstraint(fields=['user', 'permission', 'client'], name='unique_user_permission_client')
        ]

Alguém tem alguma ideia?

Carregando publicação patrocinada...
1

O fato de não dar nenhum erro é curioso.

Pra mim, o motivo claro é o fato dos ids de cliente e permissão estarem repetidos.

O que você quer fazer, aparentemente, é uma manyToMany de 3 tabelas. Procurei algum link que te ajudasse melhor em como fazer isso, mas não obtive sucesso.