我正在使用以下功能在有差异时更新模型。
但是,即使有对模型实例的更新,我可以在django shell或admin中看到。最后更新的字段不会更新,并且在创建它时似乎卡住了,即使它正在使用auto_now=True
def create_or_update_if_diff(self, model, defaults=None, **lookup):
defaults = defaults or {}
instance, created = model.objects.get_or_create(**lookup, defaults=defaults)
if created:
self.log_database_create(instance)
return instance
else:
for key, value in defaults.items():
attr = getattr(instance, key)
if key == 'end_date_fixed' and value: # Quick fix for Tariff type dif
value = parse_date(value) # Ideally should compare serialised vs serialised
if attr != value:
# If any change detected update all for efficiency
model.objects.filter(**lookup).update(**defaults)
self.log_database_update(instance)
instance.refresh_from_db()
return instance
return instance
型号:
class ProductPrices(models.Model):
unique_id = models.IntegerField(unique=True)
name = models.ForeignKey(Product)
payment_method = models.ForeignKey(PaymentMethod)
# prices exclude VAT
unit_price = models.DecimalField(max_digits=6, decimal_places=4, null=True)
saving = models.DecimalField(max_digits=6, decimal_places=2)
saving_percentage = models.DecimalField(max_digits=4, decimal_places=2)
units = models.IntegerField()
last_updated = models.DateTimeField(auto_now=True)
答案 0 :(得分:0)
原因是使用.update不会使用auto_now = True更新字段。