Я пытаюсь создать поле выбора в форме, которая содержит только те поля, которые относятся к ранее выбранной опции.Пока что на сайте пользователь может выбрать родительский вариант (я называю дисциплиной), а затем отправить, в какое время ему предлагается выбрать из набора полей, которые являются подмножеством выбранной дисциплины.В настоящее время все страницы работают и отображаются, за исключением того, что на второй странице я также получаю 6 одинаковых результатов независимо от выбранной дисциплины.Я запустил команду печати и вижу, что objects.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 результатов во втором раскрывающемся списке, хотя в строке печати отображается правильный набор запросов вприставка.Любые предложения приветствуются.