4

モデル定義:

class Footprint(models.Model)
  date = models.DateTimeField(auto_now = True)

class Stuff(Footprint):
  name = models.CharField(max_length = 255)
  some_other_field = models.CharField(max_length = 255)

オブジェクトでは、フィールドのみを更新し、関連付けられたオブジェクトで定義されているものを除いて、他のすべてのフィールドを変更しないでStuffおきたいと思います。nameFootprint

Footprint使用しない場合、オブジェクトのフィールドは正しく更新されupdate_fieldsます。

s = Stuff.objects.get(pk = 1)
s.name = 'Alexander'
s.save()

s.date # is correctly set

しかし、更新するフィールドを指定すると、関連付けられたFootprintものも保存されません。

s = Stuff.objects.get(pk = 1)
s.name = 'Tim'
s.save(update_fields = ['name'])

s.date # unfortunately, remains unchanged!!

update_fields複数のスクリプト間の干渉を避けるために使用する必要があります。

同時に、「フットプリント」オブジェクトによって定義された最後の変更を常に追跡したいと思います (これには、最後の変更日と他のいくつかのフィールドが含まれます。それらの更新はカスタムsave()メソッドによってトリガーされます)。

からのフィールドが含まれていないFootprint.save()場合でも、強制的に呼び出しを行う方法はありますか?update_fieldsFootprint

4

3 に答える 3

8

メソッドを書き直す代わりに、オプションを使用save()してすべてのフィールドをパラメータに追加する方法もあります。このような:auto_nowupdate

some_object.save(update_fields = ['updated_field', 'auto_now_date']
于 2015-09-29T11:14:05.167 に答える