18

実際のオブジェクトがdjango管理フォームで編集される前に、関連オブジェクトを保存することは可能ですか?

例えば:

models.py

class Parent(model.Model):
    pass

class Child(model.Model):
    parent = models.ForeignKey(Parent)

@receiver(post_save,sender = Parent)
def notify_parent_save(sender, instance=None, **kwargs):
    print "Parent save"

@receiver(post_save,sender = Child)
def notify_child_save(sender, instance=None, **kwargs):
    print "Child saved"

admin.py

class ChildInline(admin.TabularInline):
    model = Child
    extra = 1

class ParentsAdmin(admin.ModelAdmin):
    inlines = [ChildInline]

admin.site.register(Parent,ParentsAdmin)

ここで、django admin で親オブジェクトを保存すると、コンソールに出力されます。

Parent save
Child save

これを逆の順序で行う必要があります。

Child save
Parent save
4

4 に答える 4

21

以下は、最初に子を保存します。

class ParentAdmin(admin.ModelAdmin):
    inlines = [ChildInline]

    def save_model(self, request, obj, form, change):
        pass # don't actually save the parent instance

    def save_formset(self, request, form, formset, change):
        formset.save() # this will save the children
        form.instance.save() # form.instance is the parent
于 2013-02-13T18:44:10.870 に答える
0

シグナルで正確に何をしたいかによって、Child モデルの post_save を pre_save に変更できますか?

于 2013-02-13T17:32:53.910 に答える