2014-10-13 5 views
0

저는 장고를 처음 사용하고 있으며 저는 직업 게시판을 만들고 있습니다. 그러나 M2M의 관련 필드를 가져 오는 양식을 만드는 방법을 이해할 수 없습니다. Django manytomany를 통해 양식 및보기 만들기

#views.py 
class JobDetails(generic.DetailView): 

    model = Job 
    template_name = 'companies/job-detail.html' 

    def get_context_data(self, **kwargs): 
     context = super(JobDetails, self).get_context_data(**kwargs) 
     context['company_detail'] = Company.objects.all() 
     return context 

    def apply(request): 
     if request.method == "POST": 
      form = ApplyForm(request.POST) 
      if form.is_valid(): 
       form.save(commit=False) 

       #create job 
       job = Job.objects.all.get(pk=pk) 

       #create candidate 
       candidate = User.objects.all.get(pk=pk) 

       #assign to the through table 
       candidatetojob = CandidateToJob.objects.create(job=job, candidate=candidate) 


       form.save() 
       candidatetojob.save() 



       return HttpResponseRedirect('/jobs/') 
     else: 
       form = ApplyForm() 

     return render_to_response(
      "companies/form-candtojob.html", 
      {'form': form} 
     ) 


#forms.py 
class ApplyForm(ModelForm): 

    class Meta: 
     model = CandidateToJob 
     exclude = ['candidate', 'job', 'status'] 


#models.py 
class Job(models.Model): 
    company = models.ForeignKey(Company) 
    candidate = models.ManyToManyField('Candidate', through='CandidateToJob') 
    title = models.CharField(max_length=500) 
    pub_date = models.DateField(auto_now_add=True) 
    ... 

    def __unicode__(self): 
     return self.title 

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

class Candidate(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    photo = models.ImageField(upload_to='candidateprofile/%Y/%m/%d') 
    ... 

    def __unicode__(self): 
     return self.user.username 


class CandidateToJob(models.Model): 
    job = models.ForeignKey(Job, related_name='applied_to') 
    candidate = models.ForeignKey(Candidate, related_name='from_user') 
    STATUS_CHOICES = (
     ('0', 'New'), 
     ('1', 'Not approved'), 
     ('2', 'Approved'), 
     ('3', 'Hired') 
    ) 
    status = models.CharField(max_length=2, choices=STATUS_CHOICES) 

    def __unicode__(self): 
     return self.job.candidate.user.username 

하지만 내 template.html에서

이 일자리를 적용 loggedin되는 사용자 후보가 난 405 오류 (기준 형태의 버튼을 제출) :

여기 내 코드입니다. 관리자 만이 작업을 수행 할 수 있습니다.

내가 뭘 잘못하고 있다고 생각하나요? 미리 감사드립니다.

답변

0

POST 메서드가 정의되어 있지 않기 때문에 405 오류가 발생합니다. POST 요청을 승인하려면 POST 메소드가 필요합니다. POST 메소드가 있는데, 결코 호출되지 않을 것입니다. 적용 방법을 다음으로 변경하십시오.

def post(self, request, *args. **kwargs): 
    form = ApplyForm(request.POST) 

    if form.is_valid(): 
     form.save(commit=False) 

     #create job 
     job = Job.objects.all.get(pk=pk) 

     #create candidate 
     candidate = User.objects.all.get(pk=pk) 

     #assign to the through table 
     candidatetojob = CandidateToJob.objects.create(job=job, candidate=candidate) 

     form.save() 
     candidatetojob.save() 

     return HttpResponseRedirect('/jobs/') 

    return render_to_response(
     "companies/form-candtojob.html", 
     {'form': form} 
    ) 
+0

빠른 응답을 주셔서 감사합니다. 하지만 이제 저는 일자리를 구하려고합니다. "글로벌 네크워크는 정의되지 않았습니다." job = Job.objects.get()을 시도하면 "get()이 둘 이상의 Job을 반환했습니다"라는 오류가 발생합니다. 나는 현재 모델 pk를 얻는 방법을 모른다. 나는 현재 사용자 pk 만 얻는다. 너 나 좀 도와 줄 수있어? 다시 한번 감사합니다. –

+0

나는 당신이 무엇을하려고하는지 모르겠습니다. 귀하의 의견은 당신이 직업을 만들고 후보자를 만들려고하지만 당신이 아무것도 창조하지 않는다고 제안합니다. DB에서 검색하는 것뿐입니다. 그리고 당신의 대답은 전혀 작동하지 않습니다. 'Candidate.objects.get (pk = request.user)'는 현재 사용자의 기본 키의 기본 키를 가진 후보자를 얻으려는 것입니다. 그들이 별개의 모델이기 때문에 어떤 의미가 없습니다. – jproffitt

+0

사실 그것은 후보 모델에서 가지고 있기 때문에 작동합니다 : user = models.OneToOneField (User, primary_key = True). 감사. –

0

이것이 내가 만든 방법이다. 감사.

def post(self, request, *args, **kwargs): 
    form = self.form_class(request.POST) 

    if form.is_valid(): 
     form.save(commit=False) 

     #get the job 
     job = self.get_object(queryset=Job.objects.all()) 

     #get the user candidate 
     candidate = Candidate.objects.get(pk=request.user) 

     #assign to the through table 
     candidatetojob = CandidateToJob.objects.create(job=job, candidate=candidate) 

     candidatetojob.save() 


     return HttpResponseRedirect('/jobs/') 

    return render(request, self.template_name, {'form': form})