我有我的models.py
:如何檢查模型中的特定字段更改?
class Hotel(models.Model):
name = models.CharField(max_length=20)
currency = models.ForeignKey(Currency)
class Currency(models.Mode):
code = models.CharField(max_length=3)
name = models.CharField(max_length=10)
每當在酒店的currency
領域正在發生變化,我需要能夠做一些事情。所以我有這樣一個功能:
@receiver(pre_save,sender=Hotel)
def update_something(sender,**kwargs)
obj = kwargs['instance']
old_object = Hotel.objects.get(pk=obj.pk)
'''
Now I can do anything here comparing the oldo object with the instance
'''
的事情是我不想讓這個查詢,從此信號的目的變得愚蠢和我成爲傻子。
所以我應該可以做這樣的事情:
updated = kwargs['update_fields']
new_currency = updated['currency']
是他們的辦法,我可以找出是隻改變一個特定領域說currency
,而不是做這樣的查詢。我想在保存之前獲取與currency
外鍵相關的更改並更新內容。
對不起,我的英語不好,不能使用太專業術語。
謝謝:)
我想你會發現你需要的一切:http://stackoverflow.com/questions/1197674/actions-triggered-by-field-change-in-django。你可以使用__init__和__save__方法重寫它們,或者重寫__setter__! – Ricola3D
[Django:保存時,如何檢查字段是否已更改?]的可能重複(http://stackoverflow.com/questions/1355150/django-when-saving-how-can-you-check-if-一個場-具有改變的) – Martey