[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?
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.