Некорректное отображение моделей детей на форме в django
Я пытался сделать форму создания вакансии на своем сайте по поиску работы, но столкнулся с проблемой. У меня есть модель пользователя, модель компании и модель вакансии. Они наследуются от foreignkeys. И проблема в том, что пользователь может использовать все компании для создания вакансии, а не создавать компании этого пользователя (пользователь может создавать несколько компаний). Я пытался изменить форму создания и вид с помощью фильтрации, но у меня ничего не вышло. Я новичок в django и я не нашел ничего, чтобы решить мою проблему.
Модель компании:
class Company(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(('Title of Shop'), blank=True, max_length=255)
info = models.TextField(('Information about Shop'), null=True, blank=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.title)
Модель вакансии:
class Vacancies(models.Model):
title = models.CharField(('Title of Vacancy'), blank=True, max_length=255)
city = models.ForeignKey(City, on_delete=models.CASCADE, default='363')
description = models.TextField(('Information about Vacancy'), null=True, blank=True)
employer = models.ForeignKey(Company, on_delete=models.CASCADE)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-updated', '-created']
def __str__(self):
return str(self.title)
Создать представление вакансии:
@login_required(login_url='login')
def createVacancy(request):
form = VacanciesForm()
cities = City.objects.all()
if request.method == 'POST':
form = VacanciesForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
context = {'form': form, 'cities': cities}
return render(request, 'vacancy_form.html', context)
Форма вакансий:
class VacanciesForm(ModelForm):
class Meta:
model = Vacancies
fields = '__all__'
Что нужно изменить, чтобы добиться правильного отображения компаний в вакансии
попробуйте это:
@login_required(login_url='login')
def createVacancy(request):
user = request.user
cities = City.objects.all()
if request.method == 'POST':
form = VacanciesForm(data=request.POST, instance=user)
if form.is_valid():
form.save()
return redirect('home')
context = {'form': form, 'cities': cities}
return render(request, 'vacancy_form.html', context)
Это вы можете использовать в представлении:
def createVacancy(request, logined_user_id):
vacancies = Vacancies.objects.filter(owner=logined_user_id)
...
и вы можете попробовать немного логики здесь:
class VacanciesForm(ModelForm):
vacancies = [some_logic]
class Meta:
model = Vacancies
fields = '__all__'
и вы можете прочитать документацию: modelforms
Это работа:
просмотров
def createVacancy(request):
cities = City.objects.all()
form = VacanciesForm(data=request.POST, request=request)
if form.is_valid():
form.save()
return redirect('home')
context = {'form': form, 'cities': cities,}
return render(request, 'vacancy_form.html', context)
формы
class VacanciesForm(ModelForm, forms.Form):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
super(VacanciesForm, self).__init__(*args, **kwargs)
self.fields['employer'].queryset = EmployerCard.objects.filter(owner=self.request.user)
class Meta:
model = Vacancies
fields = '__all__'