我对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进行测试
答案 0 :(得分:1)
通过覆盖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
有些相关问题:Issue with ManyToMany Relationships not updating inmediatly after save