Ich verwende die folgende Funktion, um Modelle zu aktualisieren, wenn es einen Unterschied gibt. Aber auch wenn es eine Aktualisierung auf eine Instanz des Modells gibt, die ich in der Django-Shell oder Admin sehen kann. Das letzte Aktualisierung Feld und nicht aktualisiert scheint zu festzustecken, wenn es selbst erstellt wurde, obwohl es mit auto_now=True
Django Modell zuletzt aktualisiert nicht korrekt aktualisiert.
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
Modell:
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)