Фильтр пользовательских данных с помощью contains в Django

У меня есть модель, которая записывает данные в slug. У пользователя есть связь с моделью наград. Я пытаюсь перечислить все данные поля slug награды пользователя в фильтре contain, чтобы я мог использовать его для фильтрации данных пользователя.

NOTE : Все данные в сохранении в поле награды модели SuccessfulTransactionHistory находятся в формате slug, и модель SuccessfulTransactionHistory не имеет внешней ключевой связи с наградой и пользователем

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)

В моем view.py

success_list = SuccessfulTransactionHistory.objects.filter(award__contains=request.user.award.slug).order_by('-date')
 

Это моя ошибка

'User' object has no attribute 'award'

 ``

Ваш объект User имеет много наград, потому что вы используете ForeignKey.
Отношения таковы: Одна награда имеет одного пользователя, но один пользователь имеет одну или несколько наград (award_set - имя свойства).
. Решения? Да, конечно, но это зависит от контекста.

1- Если у пользователя только одна награда, вы можете использовать OneToOneField, и ваша логика в порядке.

2- Если пользователь может иметь более одной награды, возможно, вам потребуется 2 шага.

Шаг 1: получить все наградные пули:

award_slugs = list(request.user.award_set.values_list('slug', flat=True))

где award_slugs - список слизней.

Шаг 2: Получить список_успехов:

success_list = SuccessfulTransactionHistory.objects.filter(award__in=award_slugs)
Вернуться на верх