如何在包含M2M字段的AdminForm中使用save_model



我在django模型系统和它的默认admin中遇到了一个恼人的问题。

让我们假设我有一个非常简单的模型:

class Note(models.Model):
    text = models.CharField(max_length=200)
def __unicode__(self):
    return self.text

和像

这样的容器
class NoteCollection(models.Model):
    notelist = models.ManyToManyField(Note)
    title = models.CharField(max_length=20)
def __unicode__(self):
    return self.title

当一个NoteCollection被添加时,我想做的是更新所有的"Note"元素。我读到m2m模型有复杂的保存机制,所以我想的是,让我们读取表单对象,并自己保存Note元素!!

但是当我在APPNAME/admin.py:

from models import Note,NoteCollection
from django.contrib import admin
class NoteCollectionAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        # Something USEFUL HERE
        pass
admin.site.register(Note)
admin.site.register(NoteCollection, NoteCollectionAdmin)

Django弹出一个错误:(在使用多对多关系之前,'NoteCollection'实例需要有一个主键值)

我甚至不想使用NoteCollection对象在所有,我感兴趣的形式对象,实际上..

我也在互联网上发现了一些使用save_model与M2M字段的例子,所以我不明白为什么我一直得到这个错误;作为参考,我刚刚做了一个新的废料项目,我正在使用一个sqlite数据库测试

通过在NoteCollectionAdmin中重写save_model(),你将阻止Django保存你的NoteCollectionAdmin。处理完所有内容后,Django保存m2m表,但是失败了,因为notecollection没有自动ID,因为你没有将它保存在数据库中。

主要问题是Django在保存对象之后保存m2m文件。几天前我纠结于此,参见http://reinout.vanrees.org/weblog/2011/11/29/many-to-many-field-save-method.html

有点相关的问题:许多关系保存后没有立即更新的问题

相关内容

  • 没有找到相关文章

最新更新