没有MyUser匹配给定的查询

时间:2018-01-11 22:27:58

标签: django django-models django-views

我遇到错误没有MyUser匹配给定的查询,我不确定为什么没有匹配,因为URL已正确设置。

在我的应用程序中,我有两种用户:员工和候选人都是模型MyUser的一部分,并通过布尔值is_candidate或is_employee进行区分。

我的问题是在创建用户详细信息视图时。 我从EmployeeDetailView开始:

class EmployeeDetailView(LoginRequiredMixin, generic.DetailView):
    #import pdb; pdb.set_trace()
    model = MyUser
    template_name = 'employee_details.html'


    def get_object(self, queryset=None):
        return get_object_or_404(MyUser, pk=self.kwargs['pk2'], members__project=self.kwargs['pk1'])

    def get_context_data(self, **kwargs):
        context = super(EmployeeDetailView, self).get_context_data(**kwargs)
        employee_name = MyUser.objects.get(id=self.kwargs['pk2'])
        team_list = Project.objects.get(id=self.kwargs['pk1']).team_id.members.all()
        team_list_pop = Project.objects.get(id=self.kwargs['pk1']).team_id.members.all().exclude(id=self.kwargs['pk2'])

        context={
            'employee_name' : employee_name,
            'team_list' : team_list,
            'team_list_pop' : team_list_pop,
        }
        return context

在网址上:url(r'^project/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/$',views.EmployeeDetailView.as_view(), name='EmployeeDetails'),

工作正常,我可以访问我的用户详细信息 所以我想为CandidateDetailView做同样的代码:

class CandidateDetailView(LoginRequiredMixin, generic.DetailView):
    #import pdb; pdb.set_trace()
    model = MyUser
    template_name = 'employee_details.html'

    def get_object(self, queryset=None):
        print(self.kwargs['pk2'])
        return get_object_or_404(MyUser, pk=self.kwargs['pk2'], applicant__project=self.kwargs['pk1'])

    def get_context_data(self, **kwargs):
        context = super(CandidateDetailView, self).get_context_data(**kwargs)

        context={

        }
        return context

在网址上:url(r'^project/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/$',views.CandidateDetailView.as_view(), name='CandidateDetails'),

但这次我得到的错误是没有匹配 提出者:website.views.EmployeeDetailView

我的模特:

class Project(models.Model):

    name = models.CharField(max_length=250)
    team_id = models.ForeignKey(Team, blank=True, null=True)
    project_hr_admin = models.ForeignKey('registration.MyUser', blank=True, null=True)
    candidat_answers = models.ManyToManyField('survey.response')
    applicant = models.ManyToManyField(MyUser, related_name="applicant")

    def get_absolute_url(self):
        return reverse('website:ProjectDetails', kwargs = {'pk1' : self.pk})

class Team(models.Model):
    team_name = models.CharField(max_length=100, default = '')
    team_hr_admin = models.ForeignKey(MyUser, blank=True, null=True)
    members = models.ManyToManyField(MyUser, related_name="members")

    def __str__(self):
        return self.team_name

我做错了什么? 我在URL上收到错误:http://127.0.0.1:8000/website/project/54/43/其中54是项目ID,43是用户ID,用户ID 43是项目54的一部分

1 个答案:

答案 0 :(得分:0)

url(r'^project/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/$',views.EmployeeDetailView.as_view(), name='EmployeeDetails'),
url(r'^project/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/$',views.CandidateDetailView.as_view(), name='CandidateDetails')

这两种网址模式都具有相同的正则表达式。如果首先使用EmployeeDetails网址格式,则会始终使用它。

您需要更改视图的正则表达式,以便它们不会发生冲突,例如:

url(r'^project/employee/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/$',views.EmployeeDetailView.as_view(), name='EmployeeDetails'),
url(r'^project/candidate/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/$',views.CandidateDetailView.as_view(), name='CandidateDetails')