django - 无法以 django 形式保存数据
问题描述
我收到错误无法分配“'1'”:“dropdown.drp1”必须是“basedrop”实例。我正在分享我的代码。请帮忙。我在堆栈上有一些解决方案,但我不明白如何在我的情况下实现它。Django 错误。不能分配必须是实例
模型.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)
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
视图.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})
表格.py
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')
解决方案
我不知道它是否会导致失败,但您将 POSTed 参数“drp1”作为drp1_Id、drp2_Id 和drp3_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_pk = request.POST.get('drp1')
drp1 = basedrop.objects.get(pk=drp1_pk)
drp2 = subdrop.objects.get(pk=drp1_pk)
drp3 = lastdrop.objects.get(pk=drp1_pk)
form = dropdown(name=request.POST.get('name'), drp1=drp1, drp2=drp2, drp3=drp3)
但同样:将相同的主键传递给三个不同的模型看起来很奇怪。
推荐阅读
- c# - 通过 C# 读取和编辑 XML 文件中的特定 XML 代码
- csv - Jmeter JSR223 采样器 - 无法将数据写入 CSV 文件
- vba - Excel VBA UDF finding maximum spread between two assigned values and two ranges
- intellij-idea - 以编程方式将单元测试结果从 xml 导入 IntelliJ 中的 Junit 视图
- c++ - Iterate std::vector without using vector.end()
- r - GLM 中所有虚拟因子变量的系数
- angular - 如何在 PrimeNg 中获取没有掩码字符的值?
- javascript - 在 Protractor 中以私有模式启动 IE
- bash - grep 不能很好地搜索双引号。甚至没有\"
- java - 使用 JMS 代理重新启动服务器后如何恢复 JMS 连接