Как загрузить динамический сохраненный выпадающий список во время редактирования - PullRequest
0 голосов
/ 15 января 2019

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

Вот мой model.py

class SchoolFees(models.Model):
  fid = models.ForeignKey(FacultyData, on_delete= models.SET_NULL, null=True)
  did = models.ForeignKey(DepartmentData, on_delete= models.SET_NULL, null=True)
  sid = models.ForeignKey(SessionData, on_delete= models.SET_NULL, null=True)
  amount = models.CharField(max_length=30)

  def __str__(self):
     return self.amount

forms.py

class FeesCreationForm(forms.ModelForm):
   fid = forms.ModelChoiceField(queryset=FacultyData.objects.all(), empty_label="--Select Faculty--",
                             widget=forms.Select(attrs={'class': 'form-control'}))

   did = forms.ModelChoiceField(queryset=DepartmentData.objects.all(), empty_label="--Select Faculty First--",
                             widget=forms.Select(attrs={'class': 'form-control'}))

   sid = forms.ModelChoiceField(queryset=SessionData.objects.all(), empty_label="--Select Session--",
                             widget=forms.Select(attrs={'class': 'form-control'}))

   class Meta:
     model = models.SchoolFees
     fields = ['sid', 'fid', 'did', 'amount']

     widgets = {
        'amount': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter Amount'})

    }

   def __init__(self, *args, **kwargs):
     super(FeesCreationForm, self).__init__(*args, **kwargs)
     self.fields['did'].queryset = DepartmentData.objects.none()

    # Get did queryset for the selected fid
     if 'fid' in self.data:
        try:
            fd = int(self.data.get('fid'))
            self.fields['did'].queryset =  DepartmentData.objects.filter(fid_id=fd).order_by('id')
        except (ValueError, TypeError):
            pass # invalid input from the client; ignore and use empty queryset

Вот мой view.py

def edit_fee(request, pk):
   app = settings.CONFIG
   post = get_object_or_404(SchoolFees, pk=pk)
   if request.method == 'POST':
     form = FeesCreationForm(request.POST, instance=post)
     if form.is_valid():
        form.save()
        messages.add_message(request, messages.WARNING, "Fees record updated successfully")
        return redirect('bursary:create_fee')

   else:
     # bring edit form out
     form = FeesCreationForm(instance=post)
     table = FeesTable(SchoolFees.objects.all())
     RequestConfig(request, paginate={'per_page': 10}).configure(table)
     context = {"form": form, "fees": table, 'app': app}


return render(request, 'editfee.html', context)

Я ожидаю, что сохраненное значение передается в раскрывающийся список с другими полями формы, которые уже показывают

1 Ответ

0 голосов
/ 15 января 2019

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

class FeesCreationForm(forms.ModelForm):
  fid = forms.ModelChoiceField(queryset=FacultyData.objects.all(), empty_label="--Select Faculty--",
                             widget=forms.Select(attrs={'class': 'form-control'}))

  did = forms.ModelChoiceField(queryset=DepartmentData.objects.all(), empty_label="--Select Faculty First--",
                             widget=forms.Select(attrs={'class': 'form-control'}))

  sid = forms.ModelChoiceField(queryset=SessionData.objects.all(), empty_label="--Select Session--",
                             widget=forms.Select(attrs={'class': 'form-control'}))

  class Meta:
     model = models.SchoolFees
     fields = ['sid', 'fid', 'did', 'amount']

     widgets = {
        'amount': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter Amount'})

    }

  def __init__(self, *args, **kwargs):
     super(FeesCreationForm, self).__init__(*args, **kwargs)
     self.fields['did'].queryset = DepartmentData.objects.none()

     # Get did queryset for the selected fid
     if 'fid' in self.data:
        try:
            fd = int(self.data.get('fid'))
            self.fields['did'].queryset =  DepartmentData.objects.filter(fid_id=fd).order_by('id')
        except (ValueError, TypeError):
            pass # invalid input from the client; ignore and use empty queryset
    elif self.instance.pk:
        self.fields['did'].queryset = self.instance.fid.departmentdata_set.order_by('id')
        #backward relation - for this faculty selected, check its deparm
        #every department has its faculty
        # #in other word, which dept has their foreign key pointing to the current instance of faculty
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...