Я новичок в Django, и я строю работу. Но я не понимаю, как создать форму для получения связанных полей 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. Мне разрешено выполнять это только в администраторе.
Некоторые мысли о том, что я делаю неправильно? Спасибо заранее.
Большое спасибо за быстрый ответ. Но теперь я получаю для работы pk «глобальное имя« pk »не определено». Если я попробую job = Job.objects.get(), ошибка будет «get() возвращена более одного задания». Я не знаю, как получить текущую модель pk. Я получаю только текущего пользователя pk. Вы можете мне помочь? Еще раз спасибо. –
Я не уверен, что вы пытаетесь сделать. Ваши комментарии предполагают, что вы пытаетесь создать задание, а затем создаете кандидата, но ничего не создаете. Вы просто извлекаете из БД. И нет никакого ответа на ваш ответ. 'Candidate.objects.get (pk = request.user)' говорит, чтобы получить кандидата с первичным ключом первичного ключа текущего пользователя. Это не имеет смысла, потому что это отдельные модели. – jproffitt
На самом деле это работает, потому что в Кандидатной модели у меня есть: user = models.OneToOneField (User, primary_key = True). Благодарю. –