Django,如果对象不存在,则在AND queryset上获取错误

时间:2015-07-10 11:41:57

标签: python django django-views django-queryset

我想根据在Django中运行查询返回的值来运行if条件。

我要运行的查询是:

q = Voterlist.objects.get(Q(voter=request.user),Q(verse=verse)):

现在,如果q存在,我想更新Voterlist的投票栏。 否则我想在数据库中添加该对象。这里的问题是,如果对象已经存在,即q存在,那么它运行正常,但如果 q不存在然后我得到500错误代码并且该查询不运行。我尝试使用try块,我也尝试使用查询执行if语句,但如果q不存在,我无法运行它。

2 个答案:

答案 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