Django Фильтр QuerySets динамически с отношениями 1: 1, 1: n и m: n - PullRequest
0 голосов
/ 21 марта 2020

Цель проекта - сопоставить команды (например, футбол) с тренерами в соответствии с их интересами (например, футбол, футбол) и событием (время).

У меня проблемы с отображением атрибутов 4 разных моделей ( пользователь, тренер, событие, интерес) в одном html. Модели имеют следующие отношения:

  • Пользователь: Coaches = 1: 1
  • Coaches: Тема = n: m
  • Пользователь: Events = 1: n

Пока у меня есть следующее:

models.py:

class User(AbstractUser):
    is_coach = models.BooleanField(default=False)
    is_team = models.BooleanField(default=False)
    birthdate = models.DateField(null=True)
    text_education = models.TextField(max_length=500, default='Default Text')

class Coach(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    interests = models.ManyToManyField(Subject, related_name='interested_coach')

    def __str__(self):
        return self.user.username

class Subject(models.Model):
    name = models.CharField(max_length=30)

class Event(models.Model):
    coach_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name='events_coach')
    team_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name='events_team', null=True)
    interests = models.CharField(max_length=255, null=True)
    date = models.DateTimeField(default=timezone.now)

urls.py:

urlpatterns = [

    path('teams/', include(([
        path('search', teams.search, name='search'),
    ]]

views.py

def search(request):
    user_list = Event.objects.prefetch_related()
    user_filter = UserFilter(request.GET, queryset=user_list)
    return render(request, 'teams/user_list.html', {'filter': user_filter})

filter.py

class UserFilter(django_filters.FilterSet):
    class Meta:
        model = User
        fields = ['username', 'first_name', 'is_staff', 'first_name', 'last_name']

user. html

{% extends 'base.html' %}

{% block content %}   <form method="get">
    {{ filter.form.as_p }}
    <button type="submit">Search</button>   </form>

  <table class="table table-bordered">   <thead>
    <tr>
      <th>User_Username</th>
      <th>Coach_Interests</th>
      <th>Coach_User</th>
      <th>Eventscoach_Events</th>
    </tr>   </thead>   <tbody>
    {% for user in filter.qs %}
      <tr>

        <!-- works -->
        <td>{{ user.username}}</td>

        <!-- doesnt work -->

        <!-- Teams {{ user.interests}} no values -->
        <td>{{ user.coach.interests}}</td>

        <!-- Teams,  but not User  -->
        <td>{{ user.coach.user}}</td>

        <!-- Event -->
        <td>{{ user.events_coach}}</td>


      </tr>
    {% empty %}
      <tr>
        <td colspan="5">No data</td>
      </tr>
    {% endfor %}   </tbody> </table>

{% endblock %}

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

Текущее состояние

Однако желаемый результат должен выглядеть следующим образом:

Желаемое состояние

Я не уверен, что запрос ORM (в view.py) "User.objects.all ()" выполнен правильно? Большое спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...