Как использовать save_model в AdminForm, содержащей поле M2M? - PullRequest
2 голосов
/ 29 ноября 2011

У меня раздражающая проблема с системой моделей 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

То, что я хочу сделать, это обновить все элементы «Note», когда NoteCollection будет добавлен. Я читал, что модели 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 db для тестирования

1 Ответ

1 голос
/ 09 декабря 2011

Переопределяя save_model () в NoteCollectionAdmin, вы не позволяете Django сохранить коллекцию заметок. После обработки всего, Django сохраняет таблицу m2m, но терпит неудачу, потому что коллекция заметок не имеет автоматического идентификатора, поскольку вы не сохранили его в базе данных.

Основная проблема заключается в том, что Django сохраняет файлы m2m после сохранения объектов. Я запутался с этим несколько дней назад, см. http://reinout.vanrees.org/weblog/2011/11/29/many-to-many-field-save-method.html

Несколько связанный вопрос: Проблема с отношениями ManyToMany, не обновляющимися сразу после сохранения

...