Не удается преобразовать ключевое слово 'mem_ev' в поле в Django
У меня есть небольшой Django
проект, который состоит из 2 моделей (Event
, mem_ev
) плюс auth User
и Profile
, чтобы пользователи --< mem_ev >-- События (т.е. классические отношения "многие ко многим" между пользователями и событиями).
Я хочу иметь возможность перечислять все события для участника и всех участников для события, оба из которых влекут за собой объединение между основным набором данных и mem_ev
.
У меня есть список мероприятий, посещенных участником, который работает нормально (list_member_events
), но не удается получить список участников, посещающих мероприятие (list_event_members
).
Мой models.py это:
from django.db import models
from django.utils.text import slugify
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE) # Delete profile when user is deleted
event_count = models.IntegerField(default=0)
def __str__(self):
return f'{self.user.username} Profile' #show how we want it to be displayed
class Event(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(max_length=50,default="", null=False)
description = models.TextField()
cost = models.DecimalField(max_digits = 5, decimal_places = 2, default = 0.0)
event_date = models.DateTimeField(null=True,blank=True)
attendees = models.IntegerField(default=0)
class Meta:
ordering = ['event_date']
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(Event, self).save(*args, **kwargs)
class Meta:
ordering = ['event_date']
def __str__(self):
return self.title
class mem_ev(models.Model):
member_id = models.ForeignKey("Profile",on_delete=models.CASCADE)
event_id = models.ForeignKey("Event",on_delete=models.CASCADE)
amt_paid = models.DecimalField(max_digits = 5, decimal_places = 2, default = 0.0)
date_paid = models.DateTimeField(null=True,blank=True)
Мой views.py это:
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.models import User
from django.http import HttpResponse
from django.contrib.auth import authenticate, login
from .models import Event, mem_ev, Profile
from .forms import UserRegistrationForm
from django.contrib.auth.decorators import login_required
from django.contrib.auth import get_user_model
...
def list_event_members(request,id):
User = get_user_model()
event_members = User.objects.filter(mem_ev__event_id=id)
return render(request,'wf/list_event_members.html',{'event_members':event_members})
@login_required
def list_member_events(request,id,username):
member_events = Event.objects.filter(mem_ev__member_id=id)
user = User.objects.get(username=username)
return render(request,'wf/list_member_events.html',{'member_events':member_events,'member':user})
Я получаю в ответ следующую ошибку:
FieldError at /list_event_members/8/
Cannot resolve keyword 'mem_ev' into field. Choices are: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, profile, user_permissions, username
/home/dconran/django/mysite/wf/views.py, line 33, in list_event_members
event_members = User.objects.filter(mem_ev__event_id=id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Очевидно, что ему не нравится бит фильтра mem_ev
, но почему, если он вполне доволен этим для list_member_events
?
И как мне это исправить?
Вы работаете с profile
, а не с User
, поэтому:
event_members = User.objects.filter(profile__mem_ev__event_id=id)