我想根据在Django中运行查询返回的值来运行if条件。
我要运行的查询是:
q = Voterlist.objects.get(Q(voter=request.user),Q(verse=verse)):
现在,如果q存在,我想更新Voterlist的投票栏。 否则我想在数据库中添加该对象。这里的问题是,如果对象已经存在,即q存在,那么它运行正常,但如果 q不存在然后我得到500错误代码并且该查询不运行。我尝试使用try块,我也尝试使用查询执行if语句,但如果q不存在,我无法运行它。
答案 0 :(得分:1)
你尝试过尝试除外吗?
Voterlist.objects.get(voter=request.user, verse=verse)
更新:您还必须检查MultipleObjectsReturned异常,因为该查询可能返回多个对象;取决于你想要的方式,在一个或多个try catch块中;
另外,如果没有像这样的Q对象,你可能最好写一下get queryset,这基本上是一回事:
File file = new File("out.ser");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
//Create the multiple Objects
SerializeMe serializeMe = new SerializeMe(1);
SerializeMe serializeMe1 = new SerializeMe(10);
SerializeMe serializeMe2 = new SerializeMe(100);
SerializeMe serializeMe3 = new SerializeMe(1000);
//Create an array and assign objects
Object[] obj=new Object[]{serializeMe,serializeMe1,serializeMe2,serializeMe3};
// Write object array to Stream Class
oos.writeObject(obj);
oos.close();
//Process of Deserializable
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
//create an array of Object class
Object[] obj1=(Object[]) ois.readObject();
//looping the array
for(int i=0;i<obj1.length;i++){
SerializeMe dto = (SerializeMe) obj1[i];
System.out.println("data : " + dto.getData());
}
ois.close();
答案 1 :(得分:1)
此查询不需要Q
对象,只需执行:
q = Voterlist.objects.get(voter=request.user, verse=verse)
并且正如BodgiG建议的那样,你可以看到q
返回DoesNotExist的情况。
try:
q = Voterlist.objects.get(Q(voter=request.user),Q(verse=verse))
except VoterList.DoesNotExist:
# do something
pass