Django - результаты поисковых запросов загружаются некорректно
На моей странице результатов поиска по какой-то причине, когда пользователь делает поисковый запрос в моем игровом приложении, все результаты отображаются вместо самого запроса.
Что нужно исправить из того, что у меня есть сейчас?
Я создаю игровое приложение, в котором зарегистрированные пользователи имеют доступ к различным играм в зависимости от их ранга в нашем приложении... поэтому, когда пользователь делает поиск, скажем, по букве d
, должны отображаться все разблокированные игры и заблокированные игры, имеющие букву d
, вместо этого я получаю все игры.
Любая помощь будет принята с радостью!
Спасибо!
Ниже приведен мой код.
models.py
class Game_Info(models.Model):
id = models.IntegerField(primary_key=True, unique=True, blank=True, editable=False)
game_title = models.CharField(max_length=100, null=True)
game_rank = models.IntegerField(default=1)
game_image = models.ImageField(default='default.png', upload_to='game_covers', null=True, blank=True)
class User_Info(models.Model):
id = models.IntegerField(primary_key=True, blank=True)
image = models.ImageField(default='/profile_pics/default.png', upload_to='profile_pics', null=True, blank=True)
user = models.OneToOneField(settings.AUTH_USER_MODEL,blank=True, null=True, on_delete=models.CASCADE)
rank = models.IntegerField(default=1)
views.py
def is_valid_queryparam(param):
return param != '' and param is not None
def search_filter_view(request):
user_profile_games_filter = Game_Info.objects.all()
user_profile = User_Info.objects.all()
title_query = request.POST.get('q')
if is_valid_queryparam(title_query):
user_profile_games_filter = user_profile_games_filter.filter(game_title__icontains=title_query)
if request.user.is_authenticated:
user_profile = User_Info.objects.filter(user=request.user)
user_profile_game_obj = User_Info.objects.get(user=request.user)
user_profile_rank = int(user_profile_game_obj.rank)
user_profile_games_filter = Game_Info.objects.annotate(
user_unlocked_game=Case(
When(game_rank__lte=user_profile_rank, then=Value(True)),
default=Value(False),
output_field=BooleanField()
)
)
context = {
'user_profile': user_profile,
'user_profile_games_filter': user_profile_games_filter,
'title_query' : title_query
}
else:
context = {
'user_profile': user_profile,
'user_profile_games_filter': user_profile_games_filter,
'title_query' : title_query
}
return render(request, "search_results.html", context)
search.html
<h1>Results for "{{ title_query }}"</h1>
{% for content in user_profile_games_filter %}
{% if content.user_unlocked_game %}
<!-- unlocked games logic -->
<a class="game-tile-container" href="{% url 'detail' content.pk %}">
<li class="results_info">
<img src= "{{ content.game_image.url }}">
<span class="results_title">{{ content.game_title }}</span>
</li>
</a>
{% else %}
<!-- locked games logic -->
<a class="game-tile-container" href="{% url 'detail' content.pk %}">
<li class="results_info">
<div class="locked_game">
<img class="lock-img" src={% static 'images/treasure-chest-closed-alt.png' %} />
<img src= "{{ content.game_image.url }}">
<button class="level-up">Reach level {{ content.game_rank }} to unlock</button>
</div>
<span class="results_title">{{ content.game_title }}</span>
</li>
</a>
{% endif %}
{% endfor %}
Я думаю, что это может быть связано с этой строкой здесь:
user_profile_games_filter = Game_Info.objects.annotate(
user_unlocked_game=Case(
When(game_rank__lte=user_profile_rank, then=Value(True)),
default=Value(False),
output_field=BooleanField()
)
)
Где вы переназначаете user_profile_games_filter на объекты в Game_Info. Попробуйте удалить его и посмотреть, будет ли вывод таким же (все объекты возвращаются)?