在创建时设置具有关联对象内容的字段

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()othersNone。 我正在使用管理页面创建对象 ...

在更新对象时,它起作用了。

有什么想法吗? 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()