Как отобразить подробные объекты после фильтрации их основного объекта в django?

#django #django-models #django-templates #django-views #django-template-filters

#django #django-модели #django-шаблоны #django-представления #django-template-filters

Вопрос:


Я работаю над приложением, которое может создавать команды, игроков, сейчас я показываю объекты игроков, которые связаны с помощью внешнего ключа teams, который отображает соответствующих игроков в их команде.Но проблема, с которой я сталкиваюсь, заключается в том, что когда объекты игрока отображаются в подробном представлении, отображаются все игроки, в то время как должны отображаться конкретные объекты игрока.Пожалуйста, помогите мне решить проблему.

вот html

     {% include 'games_app/base.html' %}
    {% block body_block %}

<div>
    {% for players in play.teams.all %}
    <h1>Players :<strong>{{players.player_name}}</strong></h1>
    <h1>Players-age :<strong>{{players.player_age}}</strong></h1>
    <h1>Players-form :<strong>{{players.player_form}}</strong></h1>
    <h1>Players-over :<strong>{{players.over}}</strong></h1>
    <h1>Players-batting :<strong>{{players.batting}}</strong></h1>
    <a href="{% url 'games_app:players_update' players.pk %}">Edit Player</a></br>
    <a href="{% url 'games_app:players_delete' players.pk %}">Delete Player</a>
    {% endfor %}
</div>

    {% endblock %}
  

Здесь views.py о деталях игроков

 def Detail_Players(request,pk):

    model = models.Team.objects.get(pk=True)

    template_name = 'games_app/players_detail.html'


    return render(request, template_name, context=model)
  

[РЕШЕНО] Я просто изменил модель и другие детали.

Ответ №1:

Вы должны попробовать это:

 model = models.Team.objects.get(pk=pk)
  

А затем передать контекст шаблону правильным образом.

Комментарии:

1. что вы подразумеваете под правильной настройкой контекста

2. после выполнения того, что вы сказали, я получаю запрос на сопоставление команд, которого не существует.

3. Итак, вам нужен pk, которого нет в вашей БД.

4. Вы хотите использовать play.teams.all, но не объявляет в вашем представлении

5. Он существует, но я не знаю, почему он выдает мне эту ошибку

Ответ №2:

Похоже, вы устанавливаете значение pk в True вместо pk.

 model = models.Team.objects.get(pk=True)
  

должно быть

 model = models.Team.objects.get(pk=pk)
  

Комментарии:

1. я получаю сообщение об ошибке, тогда запрос на сопоставление команд не существует.

2. Я просто решил проблему, установив модель для игроков, а затем отобразив данные, это была глупая ошибка, но такая сложная. 🙂

Ответ №3:

в views.py существует самый простой способ создать свой detailview следующим образом:

 from django.views import generic
class DetailView(generic.DetailView):
    model = Team
    template_name = 'games_app/players_detail.html'
  

затем в urls.py Пк должен быть передан как переменный, чтобы определить, к какому игроку вы хотите перейти:

 path('<pk>/detail', views.DetailView.as_view(), name='detail'),
  

затем в вашем шаблоне используйте метод «set» через цикл for следующим образом:

  {% for player in team.player_set.all %}
....