Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

139
Vistas
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 algún lugar (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!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

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

over 4 years ago · Santiago Trujillo Denunciar

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

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda