Я пытаюсь создать поле выбора в форме, которая содержит только те поля, которые относятся к ранее выбранному варианту. На данный момент на сайте пользователь может выбрать родительский параметр (Вызываю дисциплину), а затем отправить запрос, когда его попросят выбрать из набора полей, которые являются подмножеством выбранной дисциплины. В настоящее время все страницы работают и отображаются, за исключением того, что на второй странице я также получаю те же 6 результатов независимо от того, какую дисциплину я выбираю. Я запустил команду печати и вижу, что object.filter возвращает правильные результаты, но эти результаты не отображаются в раскрывающемся меню. Я в тупике .... есть предложения?
Я попробовал несколько онлайн-учебников и проверил несколько вопросов в обмене стеками, но ничего не соответствует моей проблеме. Я действительно смущен, как
fieldOptions = Field.objects.filter(discipline_Main=discipline)
print("The available fields are: %s" % fieldOptions)
возвращает правильные результаты:
field_name = forms.ModelChoiceField(queryset=Field.objects.filter(discipline_Main=disciplineID))
только когда-либо показывает те же 6 результатов.
Мои модели:
class Discipline(models.Model):
#This is the top level category ie: Math, physics, chemistry, biology, history, english, etc
discipline_name = models.CharField(max_length=50)
description_text = models.CharField(max_length=200)
discipline_create_date = models.DateTimeField(default=datetime.now, blank=True)
def __str__(self):
return self.discipline_name
class Field(models.Model):
#This is the level below discipline, example for math would be:
#Foundations, number systems, logics, etc
field_name = models.CharField(max_length=50)
description_text = models.CharField(max_length=200)
discipline_Main = models.ForeignKey(Discipline, on_delete=models.PROTECT, related_name='discipline_Main', null=True)
create_date = models.DateTimeField('Field Creation Date', default=datetime.now, blank=True)
def __str__(self):
return self.field_name
Мои взгляды:
def pullDiscipline(request):
if request.method == 'POST':
print("If statement has run")
form = forms.DisciplineForm(request.POST)
if form.is_valid():
print("Form was valid, what now?")
print(request.POST['discipline_name'])
discipline = Discipline.objects.get(discipline_name=request.POST['discipline_name'])
print("The current discipline is: %s" % discipline)
context = discipline.id
print("The id for chemistry is: %s" % context)
return redirect('/assessment/pullField/%s' % context)
else:
print("Else statement run")
form = forms.DisciplineForm(request.POST)
return render(request, "assessment/pullDiscipline.html", {'form' : form})
def pullField(request, pk):
disciplineID = pk
form = forms.FieldForm(disciplineID, request.POST)
return render(request, "assessment/pullField.html", {'form' : form})
Мои формы:
class FieldForm(ModelForm):
def __init__(self,disciplineID,*args,**kwargs):
print("Field form is called")
print("THe disciplineID is: %s" % disciplineID)
discipline = Discipline.objects.get(id=disciplineID)
print("The name of the discipline is: %s" % discipline)
fieldOptions = Field.objects.filter(discipline_Main=discipline)
print("The available fields are: %s" % fieldOptions)
#Fetches only requested options from Field model to populate the drop down
super(FieldForm,self).__init__(*args, **kwargs)
field_name = forms.ModelChoiceField(queryset=Field.objects.filter(discipline_Main=disciplineID))
class Meta:
model = Field
fields = ['field_name']
И, наконец, мой файл шаблона:
<form id="pullField" method="POST" >
{% csrf_token %}
{{form.field_name}}
<br>
<button type="submit" class="btn btn-default">Submit</button>
</form>
Я не получаю сообщений об ошибках, кажется, что все работает, проблема в том, что каждый раз я получаю одни и те же 6 результатов во втором раскрывающемся списке, хотя строка печати отображает правильный набор запросов в консоли. Любые предложения приветствуются.