0

私は Django が初めてで、求人掲示板を作成しています。しかし、M2M の関連フィールドを取得するためのフォームを作成する方法がわかりません。

これが私のコードです:

#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 では、ログインしているユーザー候補が (フォームの送信ボタンで) 仕事に応募すると、405 エラーが発生します。これは管理者でのみ実行できます。

私が間違っていることについていくつかの考えはありますか?前もって感謝します。

4

2 に答える 2

0

POST メソッドが定義されていないため、405 エラーが発生しています。POST リクエストを受け入れるには、post メソッドが必要です。POSTされると思われるapplyメソッドがありますが、決して呼び出されません。apply メソッドを次のように変更します。

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}
     )
于 2014-10-13T20:18:32.207 に答える
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})
于 2014-10-14T11:09:02.517 に答える