Я пытаюсь обновить несколько записей, когда я нажимаю кнопку «Сохранить» в админке с помощью raw sql, который находится в models.py (def save (self, * args, ** kwargs)
Необработанный 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». В любом случае, было бы здорово понять, во-первых, как поразить все записи с помощью raw 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)