Некорректное отображение моделей детей на форме в 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__'
        
Вернуться на верх