我对如何执行任务感到有些困惑,所以想知道是否有人可以提供帮助。
我有这个模型和模型形式:
class Prefabrication(models.Model):
prefabrication_id = models.AutoField(primary_key=True)
matlist = models.ForeignKey(MatList, blank=True, null=True)
sizelist = models.ForeignKey(SizeList, blank=True, null=True)
quantity = models.IntegerField(blank=True, null=True)
workpack = models.ForeignKey(Workpack, blank=True, null=True)
code = models.CharField(max_length=50)
lineclass = models.ForeignKey(Lineclass, blank=True, null=True)
class CreateNewPrefabForm(forms.ModelForm):
class Meta:
model = Prefabrication
fields = ('prefabrication_id', 'matlist', 'sizelist',
'quantity', 'workpack', 'lineclass')
这表示我用来收集用户信息的表单。
我试图根据matlist和sizelist从查找表中获取某个值 用户给出的值。
我尝试过使用它:
if request.method == 'POST':
if createprefabcons['newprefab'].is_valid():
item = Lineclass.objects.filter(itemname__icontains=createprefabcons['newprefab'].cleaned_data['matlist'],
dn1__icontains=createprefabcons['newprefab'].cleaned_data['sizelist'],
lineclassname__icontains=createprefabcons['newprefab'].cleaned_data['matlist'])
createprefabcons['newprefab'].cleaned_data['code'] = item
createprefabcons['newprefab'].save()
return HttpResponseRedirect('/')
使用过滤器尝试获取过滤返回的项目的代码。据我所知 应该只是过滤器搜索返回的一个项目,并且该项目将具有我希望在用户提供搜索详细信息后添加的代码。
所有内容都可以很好地存储到数据库中,但是代码字段是空白的,所以要么我做错了,要么没有匹配的值,如果过滤完成,则必须匹配。任何人都可以提出一些建议。
非常感谢。
答案 0 :(得分:2)
filter()
会返回QuerySet(),其中类似于并且包含模型对象。因此,即使只有一个结果,您也可能需要将其从返回的列表中拉出来。
item = Lineclass.objects.filter()[0]
如果您希望只有一个条目,最好使用.get()
,这也会检查您的假设,因为如果返回多个条目,它将抛出异常。也许是这样的:
try:
item = Lineclass.objects.get(itemname__icontains=createprefabcons['newprefab'].cleaned_data['matlist'], dn1__icontains=createprefabcons['newprefab'].cleaned_data['sizelist'], lineclassname__icontains=createprefabcons['newprefab'].cleaned_data['matlist'])
except Lineclass.DoesNotExist:
# handle case where no items are found
do_stuff()
createprefabcons['newprefab'].cleaned_data['code'] = item