Лучший способ создать выпадающий список значений из одной модели и сохранить его как текст в поле Charfield той же модели

У меня есть модель "TnaTemplateModel"

class TnaTemplateModel(models.Model):
    id = models.UUIDField(primary_key = True,default=uuid.uuid4, editable=False)
    template_name = models.ForeignKey(TemplateNameModel, verbose_name="template name", null=False,
                                        blank=False, on_delete=models.CASCADE, help_text="Select the template")
    process_name = models.ForeignKey(ProcessModel, verbose_name="process name", null=False,
                                        blank=False, on_delete=models.CASCADE, help_text="Select the process")
    sequence = models.IntegerField(verbose_name="Process Sequence",null = False,blank = False)
    is_base = models.BooleanField()
    dependent_process = models.CharField(verbose_name="Dependent Process",null=True, blank= True,max_length= 150)
    formula = models.IntegerField(verbose_name="Formula", null= True,blank = True)
    remarks = models.CharField(verbose_name="Process remarks", null= True, blank = True,max_length= 300)

    class Meta:
        unique_together = ["template_name", "process_name"]
    
    def __str__(self):
        return str(self.template_name)

Мне нужно сохранить записи из формы, где поле dependent_process будет списком всех процессов в TNATemplateModel с нужным именем template_name и где is_base = True. Для этого я создал 2 представления и 2 формы, по 1 для сохранения всех записей с is_base = True и 2 для сохранения записей, которые будут иметь зависимый_процесс в виде выпадающего списка из ранее добавленных процессов с is_base = true. Обратите внимание, что выпадающий список должен показывать процессы с одинаковым именем шаблона, где is_base = True.

Views.py

#for saving processes with is_base = true
def baseprocesscreatenew(request,pk):
    
    template_name = TemplateNameModel.objects.get(id=pk)
    data = {'template_name': template_name.id,'is_base': True}
    dependent_list = TnaTemplateModel.objects.filter(template_name = template_name.id)
    if request.method == 'POST':
        form = BaseProcessModelformNew(request.POST,initial= data)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('templatepointslist_new',kwargs={'pk':pk}))
    else:
        form = BaseProcessModelformNew(initial= data)
    print(form.errors)

    return render (request,"tna/template_tna/baseprocessmodel_create.html",{'form':form,'dependent_list':dependent_list})

#for saving dependent processes

def dependentprocesscreatenew(request,pk):
    template_name = TemplateNameModel.objects.get(id=pk)
    data = {'template_name': template_name.id,'is_base': False}
    dependent_list = TnaTemplateModel.objects.filter(template_name = template_name.id)
    if request.method == 'POST':
        form = DependentProcessModelformNew(request.POST,initial= data)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('templatepointslist_new',kwargs={'pk':pk}))
    else:
        form = DependentProcessModelformNew(initial= data)
    print(form.errors)
    return render (request,"tna/template_tna/dependentprocessmodelnew_create.html",{'form':form,'dependent_list':dependent_list})

** forms.py **

#form for saving base process
class BaseProcessModelformNew(forms.ModelForm):
    
    class Meta:
        model = TnaTemplateModel
        fields =('__all__')
        widgets = {'template_name': forms.HiddenInput(),'dependent_process:':forms.HiddenInput(),
                    'formula':forms.HiddenInput(),'is_base':forms.HiddenInput()}

#for Saving Dependent process
class DependentProcessModelformNew(forms.ModelForm):     
    class Meta():
        model = TnaTemplateModel
        fields =('__all__')
        widgets = {'template_name': forms.HiddenInput(),
        'is_base':forms.HiddenInput()}

    def __init__(self,*args,**kwargs):
        template_id= kwargs['initial']['template_name']
        tna_template_name = TemplateNameModel.objects.get(id= template_id)
        super (DependentProcessModelformNew,self ).__init__(*args,**kwargs)
        dependent_obj_list = TnaTemplateModel.objects.filter(template_name = tna_template_name,is_base=True)
        print("*************",dependent_obj_list)

    def convert_queryset_tuple(obj):
         dependent_list=[]
         for a in obj:
            dependent_list.append[a.process_name]
            return tuple(dependent_list)    

     dependent_list = convert_queryset_tuple(dependent_obj_list)
     self.fields['dependent_process'] = forms.ChoiceField(choices=dependent_list)

Я пробовал несколько подходов к этой проблеме. Я пытался создать отдельную модель для базового и зависимого процесса, но поскольку мне нужно вычислить даты для зависимого процесса, которые будут зависеть от дат, введенных в базовом процессе, я не смог понять, как я могу сделать это с помощью двух разных моделей. После создания одной модели для базового процесса я не могу понять :

  1. Как я могу передать зависимый список в html-шаблон и создать выпадающий список, поскольку я использую форму django
  2. .
  3. Если я использую ChoiceField, я не могу получить динамический кортеж из набора запросов, и я считаю, что ChoiceField не может быть создан без кортежа
  4. .

Я потратил много времени, пытаясь найти наилучший способ достижения, и я стремлюсь найти наилучший подход для этого.

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