Po pierwsze, musisz wiedzieć, że nie używamy modeli formularzy, ponieważ jest to jedyny sposób na robienie rzeczy. Celem jest zysk czasu. Więc nie jest niemożliwe, aby zrobić wszystkie te manuallly.Personally, kiedy mam do czynienia z tymi rodzaju sytuacjach i sprecyzowane zbudować formę wypełnić ręcznie, ale tylko pierwszy lub najwyższy model hierarchii, a dla innych, użyję Ajax.For przykład:
def myController(request):
#To have the list of all you pays
pays=Pays.objects.all()
#Here you pass your pays object in your form template by a dictionnary
return render(request,"template/your_form_template.html",{"your_dic_variable":pays})
a potem w szablonie:
<select name="myChoice" id="choice">
{% for pays in your_dic_variable %}
<option value={{ pays.id }}>{{ pays.nom }}</option>
{% endfor %}
</select>
....
Jeśli masz inną opcję, możesz zadzwonić pod numer onChange()
Methode wysłania żądania Ajax do aktualizacji dynamicznie następujące dropown.As Mówiłeś, jeśli wiesz używać Ajax, będziesz miał coś takiego:
$(function(){
$('#choice')change(function()
{
//you can send ajax somewhere here
});
});
Albo inna idea jest taka, że sobie wyobrazić 3 modele mają tak:
class FirstModel(models.model):
field_m1=models.CharField(max_length=20)
class SecondModel(models.model):
field_m2=models.CharField(max_length=20)
first_model=models.ForeignKey(FirstModel,on_delete=models.CASCADE)
class ThirdModel(models.model):
field_m3=models.CharField(max_length=20)
field2=models.CharField(max_length=20)
field3=models.CharField(max_length=20)
second_model=models.ForeignKey(SecondModel,on_delete=models.CASCADE)
jak w ThirdModel
dziedzinach, które zależy od 2 poprzednich modeli jest second_model
, można użyć wzorów formularzy mieć tylko 3 pola: fields_m3
, field2
i field3
zostaną wygenerowane .They auto:
class ThirdModelForm(froms.ModelForm):
class Meta:
model=ThirdModel
fields=['fields_m3','field2','field3']
A w szablonie zrobisz tak:
<form>
{{ csrf_token }}
<!-- Data form first model,but you must have a controller send send the data -->
<select id="choice">
{% for f_model in your_dic_variable %}
<option value={{ f.id }}>{{ f.column }}</option>
{% endfor %}
</select>
<!-- second model will be populated with ajax form the choice1 id -->
<select id="choice2">
{% for f_model in your_dic_variable %}
<option value={{ f.id }}>{{ f.column }}</option>
{% endfor %}
</select>
<!-- second dropdown will be populated with ajax form the choice1 id -->
<select id="choice2">
<!-- data here will come from ajax according to the first model id value -->
</select>
<!-- third dropdown will be populated with ajax form the choice2 id,and it is the second_model field of ThirdModel data -->
<select id="choice2">
<!-- data here will come from ajax according to the second model id value -->
</select>
{{ ourform.as_p }}
<button type='submit'>Record</button>
</form>
Ja również zrobić to i to działa doskonale
Jesteś najlepszy, druga metoda działa doskonale – lislis