Django在管理中遇到generic.GenericTabularInline问题
我有一个通用的Django媒体模型,我想与许多其他模型相关联。一切似乎都很正常,但我无法使用管理中的内联表单保存新的或现有的对象。以下是相关模型:Django在管理中遇到generic.GenericTabularInline问题,django,django-admin,django-generic-views,Django,Django Admin,Django Generic Views,我有一个通用的Django媒体模型,我想与许多其他模型相关联。一切似乎都很正常,但我无法使用管理中的内联表单保存新的或现有的对象。以下是相关模型: from django.db import models from franklin.utils.content_media import * from django.contrib.contenttypes import generic from django.contrib.contenttypes.models import ContentTy
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 alpha之前 异常类型:TypeError 异常值: “NoneType”对象不可编辑 异常位置:…django\contrib\contenttypes\generic.py在\u set\u第217行
ReverseGenericRelatedObjectsDescriptor类的\u set方法出现错误。页面未向\u set\u的值参数发送任何信息:
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)
对此,任何帮助都将不胜感激。如果我不能解决这个问题,我将不得不使用一种不太干的解决方案。您需要使用
通用abularinline
。看
样本:
from django.contrib.contenttypes.admin import GenericTabularInline
class MediatInline(GenericTabularInline):
model = Media
extra = 1
class StaticContentAdmin(admin.ModelAdmin):
inlines = [MediaInline]
你能帮自己省下很多麻烦,用ForeignKey代替普通关系吗?“你能帮自己省下很多麻烦,用ForeignKey代替普通关系吗?”-我本来是这么做的,但我认为最好设计成使用普通关系,因为媒体模型是一种可以在不同应用程序中多次使用的模型。我以前从来没有用过泛型,所以我想我会试试。除了这个“内联问题”之外,它工作得很好(使用从db插入的数据进行测试),但这显然是一个大问题,会阻止我继续使用它。谢谢你的评论。很高兴在这里得到回复。