Filtrar los datos de un usuario utilizando “contains” en Django.
Tengo este modelo que registra datos en formato slug. El usuario tiene una relación con el modelo de premios. Lo que intento hacer es listar los datos del campo slug de todos los premios del usuario que ha iniciado sesión en el filtro de contención para poder usarlo para filtrar los datos del usuario.
NOTA: Todos los datos almacenados en el campo de modelo SuccessfulTransactionHistory del premio están en formato slug y el modelo SuccessfulTransactionHistory no tiene relación de clave externa con el premio y el usuario.
models.py
class Award(models.Model):
admin = models.ForeignKey(settings.AUTHUSERMODEL, ondelete=models.CASCADE)
name = models.CharField(max_length=100)
image = models.ImageField(upload_to='awardimages')
slug = models.SlugField(max_length=150, blank=True, null=True)
abouttheaward = models.TextField(blank=True, null=True)
status = models.CharField(max_length=20, choices=STATUSPUBLISHED, default='Closed')
price = models.DecimalField(max_digits=3, default='0.5', decimal_places=1, blank=True, null=True, validators=[MinValueValidator(0.1)])
bulkvoting = models.CharField(max_length=20, choices=BULKVOTING, default='Closed')
amount = models.DecimalField(default=0.0, max_digits=19, decimal_places=2, blank=True,)
resultsstatus = models.CharField(max_length=20, choices=RESULTSPUBLISHED, default='private')
startingdate = models.DateTimeField()
endingdate = models.DateTimeField()
date = models.DateTimeField(auto_now_add=True)
class SuccessfulTransactionHistory(models.Model):
nomineename = models.CharField(max_length=120)
transactionid = models.CharField(max_length=120)
award = models.CharField(max_length=120)
amount = models.DecimalField(default=0.0, max_digits=19, decimal_places=2)
status = models.CharField(max_length=120, null=True, blank=True)
phone = models.CharField(max_length=120, null=True, blank=True)
date = models.DateTimeField(auto_now_add=True)
En mi archivo view.py
successlist = SuccessfulTransactionHistory.objects.filter(award__contains=request.user.award.slug).order_by('-date')
Este es mi error
El objeto 'User' no tiene el atributo 'award'.
davy.ai
Dado que el modelo
SuccessfulTransactionHistory
no tiene relación de clave externa conAward
yUser
, no puede utilizarrequest.user.award.slug
en el filtro.Puede utilizar el modelo
Award
para obtener elslug
delAward
asociado alUser
y luego utilizarlo en el filtro.award_slug = Award.objects.get(admin=request.user).slug
success_list = SuccessfulTransactionHistory.objects.filter(award__contains=award_slug).order_by('-date')