在创建时设置具有关联对象内容的字段
Set field with content of associated objects on creation
我有型号:
class MyClass(models.Model):
name = models.CharField(max_length=30)
hash = models.CharField(max_length=64)
others = models.ManyToManyField(OtherClass, related_name='other_class', through='OtherClassRelation')
现在我需要根据 others
创建一个 hash
。
def save(self, force_insert=False, force_update=False, using=None):
self.hash = self.generate_hash()
super(models.Model, self).save(force_insert, force_update, using)
但是在save()
点others
是None
。
我正在使用管理页面创建对象 ...
在更新对象时,它起作用了。
有什么想法吗? TIA!
据我了解,您使用内联来编辑管理中的 MyClass.others
字段。如果是这样,那么您可以覆盖 ModelAdmin.save_related() 方法以在保存 M2M 内联后更新 MyClass
实例。
class MyClass(models.Model):
....
def save(self, force_insert=False, force_update=False, using=None):
self.hash = self.generate_hash() if self.pk else 'NO-HASH-YET'
super(MyClass, self).save(force_insert, force_update, using)
class MyClassAdmin(admin.ModelAdmin):
def save_related(self, request, form, formsets, change):
# save M2M with `through` attribute
super(MyClassAdmin, self).save_related(request, form, formsets, change)
# update `MyModel` instance to regenerate hash
form.instance.save()
我有型号:
class MyClass(models.Model):
name = models.CharField(max_length=30)
hash = models.CharField(max_length=64)
others = models.ManyToManyField(OtherClass, related_name='other_class', through='OtherClassRelation')
现在我需要根据 others
创建一个 hash
。
def save(self, force_insert=False, force_update=False, using=None):
self.hash = self.generate_hash()
super(models.Model, self).save(force_insert, force_update, using)
但是在save()
点others
是None
。
我正在使用管理页面创建对象 ...
在更新对象时,它起作用了。
有什么想法吗? TIA!
据我了解,您使用内联来编辑管理中的 MyClass.others
字段。如果是这样,那么您可以覆盖 ModelAdmin.save_related() 方法以在保存 M2M 内联后更新 MyClass
实例。
class MyClass(models.Model):
....
def save(self, force_insert=False, force_update=False, using=None):
self.hash = self.generate_hash() if self.pk else 'NO-HASH-YET'
super(MyClass, self).save(force_insert, force_update, using)
class MyClassAdmin(admin.ModelAdmin):
def save_related(self, request, form, formsets, change):
# save M2M with `through` attribute
super(MyClassAdmin, self).save_related(request, form, formsets, change)
# update `MyModel` instance to regenerate hash
form.instance.save()