此原始查询是否有任何问题?
Worker.objects.raw('Delete from costumer_worker Where costumer_ptr_id= %s', [costumer.id])
Costumer id返回一个字符串。但似乎没有任何事情发生,刺激后对象仍然存在
对象Worker是来自Costumer
的子对象,我想保留客户,但删除Worker
对象。
以下是Costumer
和Worker
模型:
class Costumer(User):
slug=models.SlugField(unique=True)
description=models.TextField(null=True)
phone=models.IntegerField(null=True)
isWorker=models.BooleanField()
def save(self,*args,**kwargs):
self.slug=slugify(self.username)
super(Costumer,self).save(*args, **kwargs)
def __unicode__(self):
return self.username
class Worker(Costumer):
comment=models.ForeignKey(Comment, null=True)
keyword=models.ManyToManyField('job.JobGenre', null=True)
def __unicode__(self):
return self.username
答案 0 :(得分:6)
您可以通过connection.cursor()
(docs)直接删除您的记录:
from django.db import connection
cursor = connection.cursor()
cursor.execute('DELETE FROM costumer_worker WHERE costumer_ptr_id = %s', [costumer.id])
connection.commit()
但是,你要做的事情看起来太简单了,不能直接编写SQL,而是使用django ORM。
答案 1 :(得分:2)
您可能缺少提交交易。根据您的设置,您可能需要添加:
django 1.4中的transaction.commit_unless_managed()
(django 1.5中不需要,因为默认设置不同)
答案 2 :(得分:0)
使用这一行:
from django.db import connection, transaction
cursor = connection.cursor()
with transaction.commit_on_success():
cursor.execute('DELETE FROM costumer_worker WHERE costumer_ptr_id = %s', [costumer.id])
connection.commit()