Django在很多表中都没有进入

时间:2012-12-24 13:26:24

标签: django django-admin many-to-many

我对django有一个问题,我真的无法理解。被困在它上面两天并一直在寻找源头,但我找不到任何解释,希望有人比我更了解这一点!

我有两个模型,PublicationArticle就像这样

class Publication(models.Model):
    title = models.CharField(max_length=30)
    articles = models.ManyToManyField('Article',blank=True)

    class Meta:
        db_table = 'publications'

class Article(models.Model):
    headline = models.CharField(max_length=100)

    class Meta:
         db_table = 'articles'

当我保存新的Publication时,我想自动保存默认文章。我做了一个脚本来测试它,它工作正常。两个对象都在各自的表中创建,一个条目写入publications_articles表。正如所料。

publication = Publication(title='The new exciting publication')
publication.save()
publication.articles.create(headline='The article that makes the pub so exciting')

然而,这是棘手的部分。要在管理员中保存Publication时具有相同的功能,我确实会覆盖save_model()这样的功能。

class PublicationAdmin(admin.ModelAdmin):
    list_display = ['title']

    def save_model(self, request, obj, form, change):
        if not change:
            obj.save()
            obj.articles.create(headline='The article that makes this pub so exciting')
        else:
            obj.save() 

在管理员中保存Publication会同时创建PublicationArticle,但publications_articles表中没有条目将它们捆绑在一起!

有人请,请解释一下这种行为。我即将做一个原始的sql-insert只是为了解决这个问题,但我想了解为什么实体之间没有连接。

1 个答案:

答案 0 :(得分:0)

如果您通过save_model末尾的代码进行调试,您会注意到save_related之后立即调用。此方法检查输入的Publication表单是否输入了相关数据的任何表格。由于文章是通过代码添加的,因此它不会在publications_articles表中向数据库提交任何值。

在覆盖save_model方法结束时,您还会注意到obj.articles.count()返回1,但此时表中没有插入任何值。

最好覆盖save_related

def save_related(self, request, form, formsets, change):
    form.save_m2m()
    for formset in formsets:
        self.save_formset(request, form, formset, change=change)

    if not change and not formsets 
        form.instance.articles.create(headline='The article that makes this pub so exciting')