2016-06-23 19 views
0

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=TrueDjango 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) 

Antwort

Verwandte Themen