Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

171
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!