他の多くのモデルに関連付けたい汎用 Django メディア モデルがあります。すべて正常に動作しているようですが、管理画面でインライン フォームを使用して新規または既存のオブジェクトを保存できません。関連するモデルは次のとおりです。
from django.db import models
from franklin.utils.content_media import *
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from franklin.core.scripts.models import Script
class Media(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
media_type = models.CharField(max_length = 20, choices = media_types)
media_file = models.CharField(max_length = 300, blank = True)
text_value = models.CharField(max_length = 2000, blank = True)
caption = models.CharField(max_length = 300, blank = True)
attributes = models.CharField(max_length = 150, blank = True)
related_id = models.PositiveIntegerField(null = True, blank = True)
template = models.ForeignKey(Script, null = True, blank = True)
sort_order = models.IntegerField(default = 1)
class StaticContent(models.Model):
title = models.CharField(max_length = 100, unique = True)
key = models.CharField(max_length = 200, unique = True)
content_type = models.CharField(max_length = 10, choices = content_types)
content = models.TextField(blank = True)
media = generic.GenericRelation(Media, content_type_field='content_type', object_id_field='object_id')
管理コードは次のとおりです。
from django.contrib import admin
from forms import *
from models import *
from django.contrib.contenttypes import generic
class MediaInline(generic.GenericTabularInline):
model = Media
form = MediaFormInline
extra = 1
verbose_name_plural = 'media'
class static_content_admin(admin.ModelAdmin):
inlines = [MediaInline]
admin.site.register(StaticContent, static_content_admin)
問題のあるフォームは次のとおりです。
from models import *
from django import forms
class MediaFormInline(forms.ModelForm):
class Meta:
model = Media
fields = ('media_type', 'sort_order',)
インライン フォームは正しく表示されますが、保存すると次のエラーが表示されます。
Django バージョン: 1.3 プレアルファ 例外タイプ: TypeError 例外値:
「NoneType」オブジェクトは反復可能ではありません
例外の場所: ...django\contrib\contenttypes\generic.py in _ set _、行 217
ReverseGenericRelatedObjectsDescriptor クラスの_ set _メソッドでエラーが発生しています。ページは_ set _の値パラメータに None を送信しています:
def __set__(self, instance, value):
if instance is None:
raise AttributeError("Manager must be accessed via instance")
manager = self.__get__(instance)
manager.clear()
for obj in value:
manager.add(obj)
これについての助けは大歓迎です。これを解決できない場合は、それほど DRY ではない解決策に進む必要があります。