Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

166
Visualizações
Relación de muchos a muchos mutuamente excluyentes en modelos Django

Estoy tratando de crear un modelo simple para realizar un seguimiento de los cupones de descuento en Django 1.10 (con Postgres 9.5 como base de datos subyacente) y me preguntaba si hay una manera de asegurarme de que una instancia de cupón ( id , tal vez sea un término más preciso ?) no aparece en dos relaciones M2M al mismo tiempo.

Estoy seguro de que todo el mundo está familiarizado con el funcionamiento de los cupones de descuento pero, por si acaso, déjame explicarte mi caso de uso :

  1. Siempre se aplicarían algunos cupones. Por ejemplo: "Envío gratis en tu primera compra" , o "10% de descuento en Pepsi por el resto de tu vida" ... cosas así.
  2. Algunos otros cupones se aplicarían a través de un código (una cadena simple, en realidad) que el usuario tendría que ingresar en alguna parte (como "Obtenga un 5% de descuento con el código" 5-OFF " " ... sí, probablemente hay que trabajar en la ofuscación de los códigos :-D )
  3. El usuario podría decir "No, no quiero aplicar este cupón a este pedido, lo usaré más tarde" . Por ejemplo: si el usuario puede usar un cupón único de 5 % de descuento, pero quiere conservarlo para una compra grande. Digamos que el cliente sabe que va a hacer una gran compra en el futuro próximo y ahora mismo está haciendo una pequeña. Es posible que quiera quedarse con el 5 % de descuento para la compra posterior (más grande).

Para realizar un seguimiento de esas cosas, tengo un modelo como este:

 class CouponTracker(models.Model): # Coupons that require a code to be activated: extra_applied_coupons = ManyToManyField('Coupon', related_name='+') # Coupons that the user could have applied and specifically # said no (such as 5% off if the purchase is small, and wants # to use it later): vetoed_coupons = ManyToManyField('Coupon', related_name='+')

Entonces, la pregunta es:

¿Cómo puedo hacer cumplir (a nivel de base de datos, a través de una restricción) que un cupón no aparezca al mismo tiempo en extra_applied_coupons y vetoed_coupons ?

¡Gracias de antemano!

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

¿Por qué no combina 2 extra_applied_coupons y vetoed_coupons y tiene 1 campo más (por ejemplo, type ) para determinar el grupo de cupones? Entonces el problema será más simple, solo asegúrese de que sea único en 1 relación ManyToMany

 class CouponTracker(models.Model): coupons = ManyToManyField('Coupon', related_name='+') type = models.IntegerField(default=0)

type puede ser 0 para extra_applied_coupons y 1 para vetoed_coupons . Si desea agregar más atributos de relación, puede consultar https://docs.djangoproject.com/en/1.11/topics/db/models/#extra-fields-on-many-to-many-relationships

about 4 years ago · Santiago Trujillo Relatório

0

Dado que las relaciones ManyToMany crean una tabla separada, AFAIK no puede hacer una restricción UNIQUE en las tablas. Por lo tanto, no hay una forma directa de agregar restricciones en el nivel de base de datos. Revisa esto . O tienes que hacerlo en la capa de aplicación o de alguna manera hackish comoesta

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda