Я новичок в django, я знаю, что подобные ошибки были опубликованы в stackoverflow, но все еще не в состоянии понять, чего мне не хватает в моем коде. Я застрял на этом некоторое время. Я включил весь свой код ниже.
models.py
class basedrop(models.Model):
name = models.CharField(max_length=50,blank=False,null=False)
def __str__(self):
return self.name
class subdrop(models.Model):
name = models.CharField(max_length=100,blank=False,null=False)
bsdrop = models.ForeignKey(basedrop,null=False,blank=False,on_delete=models.CASCADE)
def __str__(self):
return self.name
class lastdrop(models.Model):
name = models.CharField(max_length=100,blank=False,null=False)
sbdrop = models.ForeignKey(subdrop,null=False,blank=False,on_delete=models.CASCADE)
def __str__(self):
return self.name
class dropdown(models.Model):
name = models.CharField(max_length=50,blank=False,null=False)
drp1 = models.ForeignKey(basedrop,on_delete=models.CASCADE)
drp2 = models.ForeignKey(subdrop,on_delete=models.CASCADE)
drp3 = models.ForeignKey(lastdrop,on_delete=models.CASCADE)
def __str__(self):
return self.name
forms.py
class dropdownForm(forms.ModelForm):
bdrop_choices = [('---------','---------')]
bdrop_choices.extend([(bs.get('id'),bs.get('name')) for bs in basedrop.objects.all().values('id','name')])
drp1 = forms.ChoiceField(choices=bdrop_choices)
class Meta:
model = dropdown
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['drp2'].queryset = subdrop.objects.none()
self.fields['drp3'].queryset = lastdrop.objects.none()
self.fields['name'].required = True
if 'drp1' in self.data:
try:
country_id = int(self.data.get('drp1'))
self.fields['drp2'].queryset = subdrop.objects.filter(id=country_id).order_by('name')
except (ValueError, TypeError):
pass
elif 'drp2' in self.data:
try:
country_id = int(self.data.get('drp2'))
self.fields['drp3'].queryset = lastdrop.objects.filter(id=country_id).order_by('name')
except (ValueError, TypeError):
pass
elif self.instance.pk:
self.fields['drp2'].queryset = self.instance.drp1.city_set.order_by('name')
self.fields['drp3'].queryset = self.instance.drp2.city_set.order_by('name')
views.py
def create_drop(request):
if request.method == 'POST':
form = dropdownForm(request.POST)
if form.is_valid():
form.save()
return HttpResponse('<p>this is working</p>')
form = dropdownForm()
return render(request,'drop.html',{'form':form})
def load_subdrop(request):
drp1_id = request.GET.get('drp1')
subd = basedrop.objects.filter(id=int(drp1_id))
data = subdrop.objects.filter(bsdrop_id__in=Subquery(subd.values('id'))).order_by('name')
return render(request, 'dropdownvalue.html', {'dropmenu': data})
def load_lastdrop(request):
drp1_id = request.GET.get('drp2')
subd = subdrop.objects.filter(id=int(drp1_id))
data = lastdrop.objects.filter(sbdrop_id__in=Subquery(subd.values('id'))).order_by('name')
return render(request, 'dropdownvalue.html', {'dropmenu': data})
drop.html
<!DOCTYPE html>
<html>
<body>
<form method="post" id="firstdrop" last_drop_list="{% url 'last_drop' %}" data-cities-url="{% url 'first_drop' %}" novalidate>
{% csrf_token %}
<table>
{{form.as_table}}
</table>
<button type="submit" id="datasub">Save</button>
</form>
<div id="errordiv"></div>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(document).ready(function (){
$("#datasub").attr("disabled", true);
});
$("#id_name").change(function () {
var vl = $("#id_name").val().replace(/ /g,"")
if (vl == ''){
document.getElementById("errordiv").innerHTML="please provide valid input"
$("#datasub").attr("disabled", true);
}
else{
$("#datasub").attr("disabled", false);
document.getElementById("errordiv").innerHTML=""
}
});
$("#id_drp1").change(function () {
var url = $("#firstdrop").attr("data-cities-url");
var countryId = $(this).val();
$.ajax({
url: url,
data: {
'drp1': countryId
},
success: function (data) {
$("#id_drp2").html(data);
}
});
});
$("#id_drp2").change(function () {
var url = $("#firstdrop").attr("last_drop_list");
var countryId = $(this).val();
console.log(countryId)
$.ajax({
url: url,
data: {
'drp2': countryId
},
success: function (data) {
$("#id_drp3").html(data);
}
});
});
</script>
{{form.errors}}
</body>
</html>
ошибка привязки
Internal Server Error: /drop/create/
Traceback (most recent call last):
File "/home/amol/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/amol/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/amol/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/amol/Downloads/dependent-dropdown-example-master/lkdrp/views.py", line 14, in create_drop
if form.is_valid():
File "/home/amol/.local/lib/python3.6/site-packages/django/forms/forms.py", line 185, in is_valid
return self.is_bound and not self.errors
File "/home/amol/.local/lib/python3.6/site-packages/django/forms/forms.py", line 180, in errors
self.full_clean()
File "/home/amol/.local/lib/python3.6/site-packages/django/forms/forms.py", line 383, in full_clean
self._post_clean()
File "/home/amol/.local/lib/python3.6/site-packages/django/forms/models.py", line 398, in _post_clean
self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude)
File "/home/amol/.local/lib/python3.6/site-packages/django/forms/models.py", line 60, in construct_instance
f.save_form_data(instance, cleaned_data[f.name])
File "/home/amol/.local/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 855, in save_form_data
setattr(instance, self.name, data)
File "/home/amol/.local/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 211, in __set__
self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "'1'": "dropdown.drp1" must be a "basedrop" instance.
[05/Nov/2019 11:12:57] "POST /drop/create/ HTTP/1.1" 500 100854
Я не знаю, что не так с кодом, но моя интуиция говорит что-то не так с forms.py