Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 原始sql中的更新不会命中所有记录,尽管它们满足条件_Django_Django Models_Django Admin_Rawsql - Fatal编程技术网

Django 原始sql中的更新不会命中所有记录,尽管它们满足条件

Django 原始sql中的更新不会命中所有记录,尽管它们满足条件,django,django-models,django-admin,rawsql,Django,Django Models,Django Admin,Rawsql,当我用models.py(def save(self,*args,**kwargs)中的原始sql点击管理中的save按钮时,我试图更新几个记录 原始sql作为原型是这样的 cursor=connection.cursor() cursor.execute("UPDATE sales_ordered_item SET oi_delivery = %s WHERE oi_order_id = %s", ['2011-05-29', '1105212105']) 不幸的是,它没有更新所有符合条件的

当我用models.py(def save(self,*args,**kwargs)中的原始sql点击管理中的save按钮时,我试图更新几个记录

原始sql作为原型是这样的

cursor=connection.cursor()
cursor.execute("UPDATE sales_ordered_item SET oi_delivery = %s WHERE oi_order_id = %s", ['2011-05-29', '1105212105'])
不幸的是,它没有更新所有符合条件的记录。只有一个,有时更多,但从来没有全部

使用SQLite管理器和以下SQL,一切都很好,所有记录都会得到更新:

UPDATE sales_ordered_item
SET oi_delivery = '2011-05-29'
WHERE oi_order_id = '1105212105'
我曾考虑使用一个管理器来更新表,但我不知道在不使用静态数据(如“2011-05-29”)的情况下这将如何工作。无论如何,首先了解如何使用原始sql命中所有记录将是非常好的。 对于如何以不同的方式解决问题的任何建议,我们也表示高度赞赏

这是我为保持简短而略作删节的代码

# Orders of the customers
class Order(models.Model):
"""
Defines the order data incl. payment, shipping and delivery
"""
# Main Data
o_customer = models.ForeignKey(Customer, related_name='customer',
verbose_name=_u'Customer'), help_text=_(u'Please select the related Customer'))
o_id = models.CharField(_(u'Order ID'), max_length=10, primary_key=True,
                             help_text=_(u'ID has the format YYMMDDHHMM'))
o_date = models.DateField(_(u'created'))

and more...

# Order Item
class Ordered_item(models.Model):
"""
Defines the ordered item to which order it belongs, pricing is decoupled from the 
catalogue to be free of any changes in the pricing. Pricing and description is copied
from the item catalogue as a proposal and can be altered
"""
oi_order = models.ForeignKey(Order, related_name='Order', verbose_name=_(u'Order ID'))
oi_pos = models.CharField(_('Position'), max_length=2, default='01')
oi_quantity = models.PositiveIntegerField(_('Quantity'), default=1)

# Date of the delivery to determine the status of the item: ordered or already delivered
oi_delivery = models.DateField(_(u'Delivery'), null=True, blank=True)

and more ...

def save(self, *args, **kwargs):

    # does not hit all records, use static values for test purposes
    cursor=connection.cursor()
    cursor.execute("UPDATE sales_ordered_item SET oi_delivery = %s WHERE oi_order_id = %s", ['2011-05-29', '1105212105'])

    super(Ordered_item, self).save(*args, **kwargs)

这可能是因为您没有提交事务(请参阅)

光标后添加这些行。执行

from django.db import transaction
transaction.commit_unless_managed()

这可能是因为您没有提交事务(请参阅)

光标后添加这些行。执行

from django.db import transaction
transaction.commit_unless_managed()

你要求一个经理方法

SalesOrderedItem.objects.filter(oi_order='1105212105').update(oi_delivery='2011-05-29')
我应该为你做这项工作

编辑: 我假设您有两个模型(我从您的原始SQL中猜出这段代码):

因此:

提供所有oi订单为1105212105的
SalesOrderedItem

   ... update(oi_delivery='2011-05-29')

update
方法更新所有的
oi\u交付
属性。

您要求的是经理方法

SalesOrderedItem.objects.filter(oi_order='1105212105').update(oi_delivery='2011-05-29')
我应该为你做这项工作

编辑: 我假设您有两个模型(我从您的原始SQL中猜出这段代码):

因此:

提供所有oi订单为1105212105的
SalesOrderedItem

   ... update(oi_delivery='2011-05-29')

update
方法更新所有的
oi\u delivery
属性。

我可以获得详细信息吗?请告诉我如何实现。谢谢,我理解这一行,但我不知道该放在哪里。你不必创建一个管理器类并拥有一个objects=somemanager()在模型中?不,只要您已经按照上面所述定义了您的模型。您可以从任何地方访问它。我可以获得详细信息吗?请告诉我如何实现。谢谢,我理解这一行,但我不确定将其放置在何处。您不必创建一个管理器类并拥有一个objects=somemanager()在模型中?不,只要您已经按照上面所述定义了您的模型。您可以从任何地方访问它。也许您可以在这里发布您的代码?您是否试图覆盖模型上的
save
方法?很难猜到您正试图做什么。也许您可以在这里发布您的代码?您是否试图覆盖
save
模型上的方法?很难猜出你想做什么。