无法以django格式保存数据
我收到错误,无法分配“'1'”:“dropdown.drp1”必须是“basedrop”实例。我正在分享我的代码。请帮忙。我在堆栈上得到了一些解决方案,但我不知道如何在我的案例中实现它 models.py无法以django格式保存数据,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我收到错误,无法分配“'1'”:“dropdown.drp1”必须是“basedrop”实例。我正在分享我的代码。请帮忙。我在堆栈上得到了一些解决方案,但我不知道如何在我的案例中实现它 models.py class basedrop(models.Model): name = models.CharField(max_length=50,blank=False,null=False) def __str__(self): return self.name c
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)
drp1 = models.ForeignKey(basedrop,max_length=50,on_delete=models.CASCADE)
drp2 = models.ForeignKey(subdrop,max_length=50,on_delete=models.CASCADE)
drp3 = models.ForeignKey(lastdrop,max_length=50,on_delete=models.CASCADE)
def __str__(self):
return self.name
views.py
def create_drop(request):
if request.method == 'POST':
form = dropdownForm(request.POST or None)
if form.is_valid():
form = dropdown(name=request.POST.get('name'),drp1_Id=int(request.POST.get('drp1')),
drp2_Id=int(request.POST.get('drp2')),drp3_Id=int(request.POST.get('drp3')))
form.save()
return HttpResponse('<p>this is working</p>')
form = dropdownForm()
return render(request,'drop.html',{'form':form})
我不知道它是否会导致失败,但您正在将发布的参数“drp1”作为drp1\u Id、drp2\u Id和drp3\u Id的整数传递
如果您选择一种更直观的编码风格,您将更加容易 例如,这一行:
form=dropdown(name=request.POST.get('name'),drp1_Id=int(request.POST.get('drp1')),drp2_Id=int(request.POST.get('drp1')),drp3_Id=int(request.POST.get('drp1'))
如果获取对象并将其传递给下拉列表,则可获得可读性,特别是在出现错误时:
drp1\u pk=request.POST.get('drp1'))
drp1=basedrop.objects.get(pk=drp1\u pk)
drp2=subdrop.objects.get(pk=drp1\u pk)
drp3=lastdrop.objects.get(pk=drp1\u pk)
表单=下拉列表(name=request.POST.get('name'),drp1=drp1,drp2=drp2,drp3=drp3)
但是,再一次:
将相同的主键传递给三种不同的型号看起来很奇怪。您能标记错误的来源吗?完整代码是否可访问(例如github)?@Frank在“if form.Is\u valid()”处出错,很抱歉,我在views.py中犯了错误。实际上,我正在向每个模型传递3个不同的主键。我已经更新了我的views.py。让我试试,你给我的解决方案会给你的。首先,它应该是form=dropdown(name=request.POST.get('name'),drp1=drp1,drp2=drp2,drp3=drp3),对吗?第二件事是我在同一行上遇到了错误uuu init_uuuuu()得到了一个意外的关键字参数'name'
class dropdownForm(forms.ModelForm):
drp1 = forms.ChoiceField(choices=((bs.get('id'),bs.get('name')) for bs in basedrop.objects.all().values('id','name')))
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()
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')