Цель проекта - сопоставить команды (например, футбол) с тренерами в соответствии с их интересами (например, футбол, футбол) и событием (время).
У меня проблемы с отображением атрибутов 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 ()" выполнен правильно? Большое спасибо за вашу помощь!