我有一个小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
,因此: