В моем forms.py я хочу, чтобы referenceBFlow с полем выбора модели имел только связанный BasicFlow.В настоящее время все BasicFlow возвращаются, когда я использовал queryset = BasicFlow.objects.all () .Я хотел бы знать, как динамически фильтровать запрос.Например: если у меня есть профиль (prof1) и basicGroup (bg1), basicflow (bf1, bf2, bf3 ...), AltGroup (ag1).Теперь в моем шаблоне, если я нажму на раскрывающийся список для ссылки BFlow для ag1, он должен иметь базовый поток (bf1, bf2, bf3 ...).Если другой профиль, профиль (prof2) и basicGroup (bg2), basicflow (bf4, bf5, bf6 ...), AltGroup (ag2), то referenceBFlow для ag2 должен иметь basicflow (bf4, bf5, bf6 ...).
models.py -
class Project(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True)
...
class Profile(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
...
class B_FlowGroup(models.Model):
profile = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True, blank=True)
class BasicFlow(models.Model):
basicflGroup = models.ForeignKey(B_FlowGroup, on_delete=models.CASCADE, null=True, blank=True)
...
class A_FlowGroup(models.Model):
profile = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True, blank=True)
referenceBFlow = models.ForeignKey('BasicFlow', on_delete=models.CASCADE, null=True, blank=True)
class A_Flow(models.Model):
altflGroup = models.ForeignKey(A_FlowGroup, on_delete=models.CASCADE, null=True, blank=True)
...
forms.py - в этом .py у меня есть вложенные и обычные inlineformsets
class B_FlowGroupForm(ModelForm):
class meta:
model = B_FlowGroup
class AltFlowGroupForm(ModelForm):
class meta:
model = AltFlowGroup
referenceBFlow= forms.ModelChoiceField(widget=forms.Select,
queryset=BasicFlow.objects.all())
class BasicFlow(ModelForm):
class meta:
model = BasicFlow
BasicFlowFormSet = inlineformset_factory(B_FlowGroup, BasicFlow, form=BasicFlowForm, extra=1)
class BaseB_GroupFormset(BaseInlineFormSet):
def add_fields(self, form, index):
super(BaseB_GroupFormset, self).add_fields(form, index)
# save the formset in the 'nested' property
form.nested = BasicFlowFormSet(instance=form.instance,
data=form.data if form.is_bound else None,
files=form.files if form.is_bound else None,
prefix='basicFlow')
B_GroupInlineFormSet = inlineformset_factory(Profile, B_FlowGroup, form=B_FlowGroupForm, exclude=(),
formset=BaseB_GroupFormset, extra=1, can_delete=False)
A_GroupInlineFormSet = inlineformset_factory(Profile, A_FlowGroup, form=A_FlowGroupForm, exclude=(),
formset=BaseA_GroupFormset, extra=1, can_delete=False)
views.py - в этом .pyЯ создал вид обновления с профилем, являющимся основной моделью, а затем создал экземпляры B_GroupInlineFormSet и A_GroupInlineFormSet.Теперь, когда шаблон перерисован, я хочу, чтобы поле referenceBFlow modelchoice в A_GroupInlineFormSet отображало только базовые потоки, связанные с B_GroupInlineFormSet.
class ModelUCUpdateView(UpdateView):
model = Profile
form_class = ProfileForm
def get_object(self):
...
def get_success_url(self):
....
def get_context_data(self, **kwargs):
context = super(ModelUCUpdateView, self).get_context_data(**kwargs)
if self.request.POST:
context['form'] = ProfileForm(self.request.POST, instance=self.object)
context['basicflowgroup_form'] = B_GroupInlineFormSet(self.request.POST, self.request.FILES, instance=self.object, prefix='modelbasicflowgroup')
context['alflowgroup_form'] = A_GroupInlineFormSet(self.request.POST, self.request.FILES,instance=self.object, prefix='altflowgroup')
else:
ccontext['form'] = ProfileForm( instance=self.object)
context['basicflowgroup_form'] = B_GroupInlineFormSet(self.request.FILES, instance=self.object, prefix='modelbasicflowgroup')
context['alflowgroup_form'] = A_GroupInlineFormSet(self.request.FILES,instance=self.object, prefix='altflowgroup')
return context
#other methods
В настоящее время я получаю все базовые потоки вместо тех, которыесвязаны с определенной B_FlowGroup.Основываясь на моем коде, я хотел бы знать, как динамически фильтровать поле выбора модели на основе базовых потоков, связанных с B_FlowGroup.