Скажем, у меня есть функция просмотра, которая создает объект Vacancy
при сохранении формы, и она имеет поле company
, которое, если форма действительна, должно быть присвоено со значением поля name
, то есть на другой модели с именем EmployerProfile
, как я могу это сделать? У меня company
в качестве внешнего ключа для моей модели.
Мои модели
class EmployerProfile(models.Model):
name = models.CharField(max_length = 64)
description = models.TextField()
username = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete = models.CASCADE)
class Vacancy(models.Model):
name = models.CharField(max_length = 64)
competences = models.CharField(max_length = 32)
salary = models.DecimalField(decimal_places = 2, max_digits = 10)
description = models.TextField(null = True)
company = models.ForeignKey(EmployerProfile, on_delete = models.CASCADE)
featured = models.BooleanField(default = False)
Мой взгляд
@login_required(login_url = 'login')
def vacancyAddView(request):
if request.method == 'POST':
form = VacancyAddForm(request.POST)
if form.is_valid():
form.save()
return redirect('profile')
else:
form = VacancyAddForm()
context = {
'form':form
}
return render(request, "addVacancy.html", context)
Моя форма
class VacancyAddForm(forms.ModelForm):
class Meta:
model = Vacancy
fields = [
'name',
'competences',
'description',
'salary',
]
PS Я пытался добавить этот фрагмент кода на мой взгляд, сразу после form.is_valid():
obj = EmployerProfile.objects.get(username = request.user)
form.instance.company = obj.name
, но это не так не работает, он вернул ValueError
с текстом "Vacancy.company" must be a "EmployerProfile" instance.
PPS Я также попытался переопределить метод save
в моей модели, например,
def save(self, *args, **kwargs):
self.company = self.EmployerProfile.name
super(Vacancy, self).save(*args, **kwargs)
, но это не так тоже не работает.