2014-09-19 97 views
2

這是我當前的SQL查詢。將原始SQL查詢轉換爲Django查詢集

'''UPDATE chat SET recd="1" WHERE nick_from="%s" AND nick_to="%s" 
          ''' % (sender_user, reciever_user) 

我想將它轉換爲Django ORM QuerySet。

該模型如下。

class Chat(models.Model): 
    # id = models.IntegerField(primary_key=True) 
    nick_from = models.CharField(max_length=255) 
    nick_to = models.CharField(max_length=255) 
    message = models.TextField() 
    sent = models.DateTimeField() 
    recd = models.IntegerField() 
    time = models.BigIntegerField() 
    recd_email = models.IntegerField() 

    class Meta: 
     db_table = 'chat' 
+0

你如何獲得結果從'UPDATE'查詢? – quantum 2014-09-19 23:54:11

+0

顯示您的模型定義。謝謝。 – alecxe 2014-09-20 01:16:01

+0

我已經添加了模型類 – eddwinpaz 2014-09-20 02:32:10

回答

3

您可以使用QuerySet.filterQuerySet.update

chat.objects.filter(nick_from=sender_user, nick_to=receiver_user).update(recd='1') 
+0

這是我的代碼,http://pastie.org/9577970有什麼想法? – eddwinpaz 2014-09-20 03:38:56

+0

@eddwinpaz,我不喜歡我沒有給你答案,它不工作嗎? – falsetru 2014-09-20 03:43:55

+0

它執行查詢但不更新值爲1,並沒有給出任何錯誤 – eddwinpaz 2014-09-20 03:44:44

1

我沒有真正關注ORM特定的墊片,而是傾向於使用原始SQL。在Django,你可以easily do this

chat.objects.raw(''''UPDATE chat SET recd="1" WHERE nick_from="%s" AND nick_to="%s" 
         ''' % (sender_user, reciever_user)) 

如果這沒有幫助,請發表評論。

+0

我已經這樣做了。並沒有工作... :( – eddwinpaz 2014-09-20 02:58:26

+0

這是一箇舊的帖子,但Django ORM很糟糕,所以他們的Raw Wrapper。 – eddwinpaz 2017-11-07 13:49:39