3

我对 django 模型系统 + 它的默认管理员有一个烦人的问题。

假设我有一个非常简单的模型,例如:

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 对象,我对表单对象感兴趣,实际上..

我还在互联网上找到了一些使用带有 M2M 字段的 save_model 的示例,所以我不明白为什么我不断收到此错误;作为参考,我刚刚制作了一个新的废品项目,我正在使用一个 sqlite db 进行测试

4

1 回答 1

2

通过在 NoteCollectionAdmin 中覆盖 save_model(),您可以防止 Django 保存您的 notecollection。处理完所有事情后,Django 保存了 m2m 表,但失败了,因为 notecollection 没有自动 ID,因为您没有将它保存在数据库中。

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

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

于 2011-12-09T14:02:23.280 回答