내 프로젝트에서 모델을 저장할 때 프로젝트가 공동 모델로 다른 사용자를 추가 할 수있는 manytomanyfield, access_list가 포함 된 Access라는 다른 모델을 만듭니다. 그것은 작동 - 나는 새 프로젝트를 만들 때, 나는 그것으로 추가 사용자를 추가 할 수 있습니다,하지만 난 2 사용자를 추가하면 내가 계정으로 전환 할 경우, 더 이상 오류로ManytoManyField 나누기 추가 Django
Exception Value: get() returned more than one Access -- it returned 2!"
을 페이지를 제공하지 않습니다 프로젝트에 추가 한 다음 해당 계정으로 다른 사용자를 추가하면 정상적으로 추가되고 페이지가 중단되지 않습니다.
페이지가 깨지면 데이터베이스에 프로젝트 인스턴스가 하나만 있더라도 내 프로젝트 페이지에 프로젝트의 추가 인스턴스가 생성됩니다.
내 코드:
Models.py :
class Project(models.Model):
created_by = models.ForeignKey(User)
super(Project, self).save()
Access.objects.get_or_create(project=self)
class Access(models.Model):
project = models.ForeignKey(Project)
access_list = models.ManyToManyField(User)
pubdate = models.DateTimeField(default=timezone.now)
Views.py :
@login_required
def access(request, project_id=1):
thisuser = request.user
if Access.objects.filter(Q(access_list=thisuser) | Q(project__created_by=thisuser), project__id=project_id).exists():
accesspermission = Access.objects.filter(Q(access_list=thisuser) | Q(project__created_by=thisuser), project__id=project_id).order_by('-project__project_pubdate')[0]
else:
accesspermission = None
if Entry.objects.filter(project_id=project_id).exists():
anyentries = Entry.objects.filter(project_id=project_id, entry_unique=1).order_by('-entry_pubdate')[0]
else:
anyentries = None
if Entry.objects.filter(project_id=project_id, entry_unique=1).exists():
firstentry = Entry.objects.filter(project_id=project_id, entry_unique=1).order_by('-entry_pubdate')[0]
else:
firstentry = None
if Entry.objects.filter(project_id=project_id).exists():
lastentry = Entry.objects.filter(project_id=project_id).order_by('-entry_pubdate')[0]
lastentrynumber = lastentry.entry_unique
else:
lastentrynumber = None
if request.method == "POST":
form = AddAccessForm(request.POST)
if form.is_valid():
p = form.save(commit=False)
adduserfromform = p.accessupdate
if User.objects.filter(username=adduserfromform).exists():
usertoadd = User.objects.get(username=adduserfromform)
projecttoadd = Access.objects.filter(project__id=project_id).order_by('-project__project_pubdate')[0]
projecttoadd.access_list.add(usertoadd)
else:
usertoadd = None
removeuserfromform = p.accessremove
if User.objects.filter(username=removeuserfromform).exists():
usertoremove = User.objects.get(username=removeuserfromform)
projecttoremove = Access.objects.filter(project__id=project_id).order_by('-project__project_pubdate')[0]
projecttoremove.access_list.remove(usertoremove)
else:
usertoremove = None
form.save()
return HttpResponseRedirect('/projects/get/%s/access' % project_id)
역 추적 : 전체 역 추적을 추가
Traceback (most recent call last):
File "/webapps/filmeditdb/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/webapps/filmeditdb/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/webapps/filmeditdb/filmeditdb/docproject/views.py", line 284, in access
def access(request, project_id=1):
File "/webapps/filmeditdb/local/lib/python2.7/site-packages/django/db/models/manager.py", line 151, in get
return self.get_queryset().get(*args, **kwargs)
File "/webapps/filmeditdb/local/lib/python2.7/site-packages/django/db/models/query.py", line 310, in get
(self.model._meta.object_name, num))
MultipleObjectsReturned: get() returned more than one Access -- it returned 2!
2014-03-25 22:48:26 [17264] [INFO] Handling signal: winch
2014-03-25 22:48:26 [17264] [INFO] SIGWINCH ignored. Not daemonized
전 라인을 바꿨지 만 도움이되지 않습니다. 내가 요청한대로 추적을 추가했다. –
@JasonB 설명을 추가했으나 표시된 줄에서 'Access.objects.get()'에 대한 유일한 호출입니다. 잘못된 호출을 식별하여 필터로 가져 와서 수정하거나 매개 변수를 수정하십시오. –
내 전체보기에서 하나의 다른 Access.objects.get 호출이 없습니다. 어디에서 볼 수 있는지 또는 다른 곳을 알 수 없습니다. –