Как сделать так, чтобы внешний ключ django-form указывал на модель, которая сейчас создается

Моя Models.py содержит 2 модели, каждая Project может иметь несколько Role (т.е. отношения один-ко-многим):

class Project(models.Model):
    title = models.CharField(max_length=2000)
    state_of_project = models.CharField(max_length=10, default='ongoing')
    introduction = models.TextField(blank=True)

class Role(models.Model):
    role_name =  models.CharField(max_length=30)
    project = models.ForeignKey(Project, on_delete=models.SET_NULL, null = True)
    
    def __str__(self):
        return self.role_name 

И они имеют свои соответствующие формы в файле forms.py, которые доступны в двух разных html файлах:

class ProjectForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ProjectForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Project
        fields = ['title', 'state_of_project', 'introduction']


class RoleForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(RoleForm, self).__init__(*args, **kwargs)

    project = forms.ModelChoiceField(queryset=Status.objects.all())

    class Meta:
        model = Role
        fields = ['role_name', 'project']

При заполнении ProjectForm с html страницы, я хотел сделать возможность перехода по другой ссылке, которая позволяет заполнить RoleForm для нее на другой вкладке. Но роль, которую вы там добавляете, должна быть связана только с текущим проектом (т.е. внешний ключ этой роли должен указывать на проект, который сейчас создается пользователем, но еще не находится в базе данных).

Но в моей текущей реализации через django-form, пользователь может просто выбрать любой прошлый проект для новой роли, вместо того, чтобы иметь возможность выбрать только проект, который в настоящее время создается/редактируется.

Есть ли какое-либо решение этой проблемы. И если ни один внешний ключ не может указывать на создаваемую запись в базе данных, есть ли альтернативные способы добавления записи в эту базу данных через форму?

Вернуться на верх