[英]Filter a user data using contains in Django
我有這個 model 可以在 slug 中記錄數據。 用戶與獎勵 model 有關系。 我想要做的是在包含過濾器中列出所有登錄用戶的獎勵 slug 字段數據,以便我可以使用它來過濾用戶的數據。
注意:SuccessfulTransactionHistory model 字段中保存的所有數據都是 slug 格式,SuccessfulTransactionHistory model 與獎項和用戶沒有外鍵關系
models.py
class Award(models.Model):
admin = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
image = models.ImageField(upload_to='award_images')
slug = models.SlugField(max_length=150, blank=True, null=True)
about_the_award = models.TextField(blank=True, null=True)
status = models.CharField(max_length=20, choices=STATUS_PUBLISHED, default='Closed')
price = models.DecimalField(max_digits=3, default='0.5', decimal_places=1, blank=True, null=True, validators = [MinValueValidator(0.1)])
bulk_voting = models.CharField(max_length=20, choices=BULK_VOTING, default='Closed')
amount = models.DecimalField(default=0.0, max_digits=19, decimal_places=2, blank=True,)
results_status = models.CharField(max_length=20, choices=RESULTS_PUBLISHED, default='private')
starting_date = models.DateTimeField()
ending_date = models.DateTimeField()
date = models.DateTimeField(auto_now_add=True)
class SuccessfulTransactionHistory(models.Model):
nominee_name = models.CharField(max_length=120)
transaction_id = 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)
在我看來.py
success_list = SuccessfulTransactionHistory.objects.filter(award__contains=request.user.award.slug).order_by('-date')
這是我的錯誤
'User' object has no attribute 'award'
``
您的用戶 object 有很多獎項,因為您使用 ForeignKey。
關系是:一個獎項有一個用戶,但一個用戶有一個或多個獎項(award_set 是屬性名稱)。
解決方案? 是的,當然,但取決於上下文。
1-如果用戶只有一個獎項,你可以使用OneToOneField ,你的邏輯是可以的。
2-如果用戶可以擁有多個獎項,可能需要2個步驟。
第 1 步:獲得所有獎勵蛞蝓:
award_slugs = list(request.user.award_set.values_list('slug', flat=True))
其中award_slugs
是slugs 列表。
第 2 步:獲取成功列表:
success_list = SuccessfulTransactionHistory.objects.filter(award__in=award_slugs)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.