/ crms / cust / cust_popup /中的无效查询 原始查询必须包含主键
发生错误。你是如何处理的?
请求方法:POST
请求网址:http://192.168.91.170:55555/crms/cust/cust_popup/
Django版本:1.11.1
Python可执行文件:/ home / sweetyxyz / dev / web / myvenv / bin / python
Python版本:3.4.3
我的源代码是.....
models.py
class Cu_00(models.Model):
cu_code = models.CharField(primary_key=True, unique=True, max_length=50)
cu_nm = models.CharField(db_index=True, max_length=100)
cu_addr = models.CharField(max_length=200,null=True)
cu_memo = models.TextField(max_length=2000,null=True)
cu_comp_yn = models.CharField(max_length=2,null=True)
cu_use_yn = models.CharField(max_length=2, null=True)
cu_del_yn = models.CharField(max_length=2, default='N' )
createDate = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.cu_nm
urls.py
....
url(r'^cust/cust_popup/$' , views_cu.isCustData, name='isCustData' ) ,
.....
views.py
def isCustData(req):
if req.method == 'POST':
cCust_nm = req.POST['cust_nm']
else:
cCust_nm = req.GET.get['cust_nm']
cCust_nm = '%'+cCust_nm+'%'
cDel_yn = 'N'
cQuery = "select exists( select * from crmtotal_cu_00 where cu_nm like %s and cu_del_yn = %s )"
events = Cu_00.objects.raw(cQuery, [cCust_nm, cDel_yn])
context = {}
events = serializers.serialize('json', events)
context['is_taken'] = events
return JsonResponse(data=serializers.serialize('json', events))
html源代码
....
<script>
$("#cust_nm").change(function(){
var cust_nm = $("#cust_nm").val() ;
console.log(cust_nm) ;
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
$.ajax({
url: "{% url 'isCustData' %}",
type : 'POST' ,
data: {
'cust_nm': cust_nm
},
dataType: 'json',
success: function (data) {
if (data.is_taken) {
alert("Cust Name is Found");
}
}
});
})
</script>
答案 0 :(得分:0)
在raw()
的调用中使用该查询没有意义。
cQuery = "select exists(
select * from crmtotal_cu_00 where cu_nm like %s and cu_del_yn = %s
)"
你在这里选择了一个真/假,raw()
应该如何将它变成一个可迭代的对象实例?
您可以使用Django的ORM重新创建查询,而无需直接使用SQL。
如果您从代码中删除此行:
cCust_nm = '%'+cCust_nm+'%'
然后这应该给你你想要的东西:
Cu_00.objects.filter(cu_nm__contains=cCust_nm, cu_del_yn='N').exists()
根据cu_nm
包含的内容以及您尝试选择的内容,您可能需要使用__icontains
代替__contains
。请参阅文档here
.exists()
会返回一个布尔值,因此您可能需要调整序列化程序以解决此问题。