Django Model上次更新未正确更新。

时间:2016-06-23 16:44:40

标签: django-models

我正在使用以下功能在有差异时更新模型。 但是,即使有对模型实例的更新,我可以在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)

1 个答案:

答案 0 :(得分:0)

原因是使用.update不会使用auto_now = True更新字段。

https://code.djangoproject.com/ticket/22981