在创建时设置包含关联对象内容的字段

时间:2015-02-04 22:26:23

标签: python django django-models

我有模特:

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')

现在我需要根据hash创建others

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。 我正在使用admin-pages ...

创建对象

在更新对象时,它可以正常工作。

有什么想法吗? TIA!

1 个答案:

答案 0 :(得分:1)

据我了解,您使用内联编辑管理员中的MyClass.others字段。如果是这样,那么您可以在保存M2M内联后覆盖ModelAdmin.save_related()方法来更新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()