2017-12-24 9 views
0

Hallo Leute, ich habe ein Problem mit meinen privaten Schlüsseln. Ich weiß nicht, was das Problem ist, wenn jemand mir eine Hand geben könnte, würde es sehr geschätzt werden.Wie man PK verwaltet, wenn eine Ansicht damit aufgerufen werden muss

die errror, die ich erhalte, ist:

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 


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') 

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

    def __str__(self): 
     return self.name 

meine Ansichten:

class HomePage(TemplateView): 
    template_name= 'index.html' 

class LinkTeam(generic.ListView): 
    template_name = 'link_project.html' 

    def get_queryset(self): 
     #import pdb; pdb.set_trace() 
     #team2 = Team.objects.all().filter(team_hr_admin = self.request.user) 
     queryset = Team.objects.filter(team_hr_admin=self.request.user) 
     return queryset 

def TeamSelect(request): 
    import pdb; pdb.set_trace() 
    if request.method == "POST": 
     select_form = EditSelectTeam(request.user, request.POST) 
     if select_form.is_valid(): 
      data = select_form.cleaned_data['team_choice'] 
      obj2 = Project.objects.filter(project_hr_admin=request.user) 
      obj3 = obj2.latest('id') 
      if obj3.team_id == None: 
       obj3.team_id = data 
       obj3.save() 
       obj4 = obj3.team_id 
       obj5 = obj4.members.all() 

       for i in obj5: 
        current_site = get_current_site(request) 
        message = render_to_string('acc_join_email.html', { 
         'user': i.first_name, 
         'domain':current_site.domain, 
         }) 
        mail_subject = 'You have been invited to SoftScores.com please LogIn to get access to the app' 
        to_email = i.email 
        email = EmailMessage(mail_subject, message, to=[to_email]) 
        email.send() 
       messages.success(request, 'test') 
       return HttpResponseRedirect(reverse('website:ProjectDetails', kwargs={'pk1':obj3.id})) 
      else: 
       print('this project has already a team') 
     else: 
      print('Non Valid form') 

    else: 
     select_form = EditSelectTeam(request.user) 
    return render(request,'link_project.html', 
          {'select_form':select_form }) 

class HRIndex(generic.ListView): 
    #import pdb; pdb.set_trace() 
    template_name = "HR_index.html" 
    model = Project 

class CandidateIndex(TemplateView): 
    #import pdb; pdb.set_trace() 
    template_name = "candidate_index.html" 

class EmployeeIndex(TemplateView): 
    #import pdb; pdb.set_trace() 
    template_name = "employee_index.html" 

    def get_context_data(self, **kwargs): 
     context = super(EmployeeIndex, self).get_context_data(**kwargs) 
     surveys = Survey.objects.filter(is_published=True) 
     if not self.request.user.is_authenticated(): 
      surveys = surveys.filter(need_logged_user=False) 
     context['surveys'] = surveys 
     return context 

class ProjectCreate(CreateView, LoginRequiredMixin): 
    model = Project 
    fields = ['name'] 
    template_name = 'project_form.html' 

    def form_valid(self, form): 
     form.instance.project_hr_admin = self.request.user 
     return super(ProjectCreate, self).form_valid(form) 

class ProjectDetailView(generic.DetailView, LoginRequiredMixin): 
    #import pdb; pdb.set_trace() 
    model = Project 
    template_name = 'project_details.html' 

    def get_context_data(self, **kwargs): 
     context = super(ProjectDetailView, self).get_context_data(**kwargs) 
     try: 
      team_name = Project.objects.get(id=self.kwargs['pk1']).team_id.members.all() 
      context['team_name'] = team_name 
     except AttributeError: 
      pass 
     return context 

class EmployeeDetailView(generic.DetailView, LoginRequiredMixin): 
    #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 

class TeamCreate(CreateView): 

    model = Team 
    fields = ['team_name'] 
    template_name = 'team_form.html' 

    def form_valid(self, form): 
     #import pdb; pdb.set_trace() 
     valid = super(TeamCreate, self).form_valid(form) 
     form.instance.team_hr_admin = self.request.user 
     obj = form.save() 
     #SELECT * FROM project WHERE user = 'current_user' AND team_id = NULL 
     obj2 = Project.objects.get(project_hr_admin=self.request.user, team_id=None) 
     obj2.team_id = obj 
     obj2.save() 
     return valid 
     return super(TeamCreate, self).form_valid(form) 

    def get_success_url(self): 
     #import pdb; pdb.set_trace() 
     project = Project.objects.get(team_id=None, project_hr_admin=self.request.user) 
     return project.get_absolute_url() 
Allgemeindetailansicht ProjectDetailView muss entweder mit einem Objekt pk oder eine Schnecke

meine Modelle sind die folgenden genannt werden

meine Urls:

urlpatterns = [ 
    url(r'^hr_index/$', views.HRIndex.as_view(), name='hr_index'), 
    url(r'^candidate_index/$', views.CandidateIndex.as_view(),name='candidate_index'), 
    url(r'^employee_index/$', views.EmployeeIndex.as_view(),name='employee_index'), 
    url(r'^addproject/$', views.ProjectCreate.as_view(), name='add_project'), 
    url(r'^project/(?P<pk1>[0-9]+)/addteam/$', views.TeamCreate.as_view(), name='add_team'), 
    url(r'^project/(?P<pk1>[0-9]+)/linkteam/$', views.LinkTeam.as_view(), name='link_team'), 
    url(r'^project/(?P<pk1>[0-9]+)/linkteam2/$', views.TeamSelect, name='team_select'), 
    url(r'^project/(?P<pk1>[0-9]+)/$',views.ProjectDetailView.as_view(), name='ProjectDetails'), 
    url(r'^project/(?P<pk1>[0-9]+)/api/chart/data2/$',views.TeamChartData.as_view(), name='TeamChartData'), 
    url(r'^project/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/$',views.EmployeeDetailView.as_view(), name='EmployeDetails'), 
    url(r'^project/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/api/chart/data/$',views.EmployeeChartData.as_view(), name='EmployeeChartData'), 

Was vermassele ich hier?

Antwort

2

DetailViewget_object Methode sucht nach pk URL Argument. Weil Sie nur pk1 URL-Argument haben, es Fehler zu erhöhen. Sie müssen pk Argument URL benennen:

url(r'^project/(?P<pk>[0-9]+)/$',views.ProjectDetailView.as_view(), name='ProjectDetails') 

oder außer Kraft setzen get_object Methode, wie Sie in EmployeeDetailView tat.

können Sie auch versuchen, pk_url_kwarg innerhalb ProjectDetailView wie folgt zu definieren:

class ProjectDetailView(generic.DetailView, LoginRequiredMixin): 
    #import pdb; pdb.set_trace() 
    model = Project 
    template_name = 'project_details.html' 
    pk_url_kwarg = 'pk1' 

In diesem Fall müssen Sie nicht URL-Muster zu ändern oder get_object außer Kraft setzen.

+1

thx Männer! Ich overode get_object;) – Ben2pop

+0

Jetzt bekomme ich auch, dass def TeamSelect hat ein unerwartetes Keyword-Argument 'PK1' irgendeine Idee? – Ben2pop

+0

@ Ben2pop für die Funktion basierte Ansicht müssen Sie URLs Argumente als Funktionsargumente definieren, wie folgt: 'def TeamSelect (request, pk1 = None):'. Fügen Sie der TeamSelect-Funktion einfach das 'pk1'-Argument hinzu. – neverwalkaloner

Verwandte Themen