2012-01-12 4 views
2

AdminのGalleryにインラインImageオブジェクトを追加したいと思っています(下記のadmin.pyで試してみます)。問題は、イメージモデルにcontent_typeフィールドがないことです。例外が発生する。動画オブジェクトでも同じことをしたいと思います。ここで私は簡単にそれを行うことができます私のmodels.pyとadmin.pyと管理パネルで逆引き一般関係のインラインオブジェクトを編集するにはどうすればよいですか?

以下より説明私のmodels.py

# -*- coding: utf-8 -*- 

# Create your models here. 
from apps.util import models 
from django.contrib.contenttypes.models import ContentType 
from django.contrib.contenttypes import generic 
from django.utils.translation import ugettext_lazy as _ 


class Image(models.Model): 
    """ 

    """ 
    title = models.CharField(_('Title'), max_length=255) 
    image = models.ImageField(upload_to="images") 
    pub_date = models.DateTimeField(_('Date published'))   

    def __unicode__(self): 
     return self.title 

class Video(models.Model): 

    title = models.CharField(_('Title'), max_length=255) 
    video = models.FileField(upload_to="videos") 
    pub_date = models.DateTimeField(_('Date published')) 

    def __unicode__(self): 
     return self.title 

class Gallery(models.Model): 

    title = models.CharField(_('Title'), max_length=255) 
    pub_date = models.DateTimeField(_('Date published')) 

    def __unicode__(self): 
     return self.title 

class GalleryItem(models.Model): 
    gallery = models.ForeignKey(Gallery) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    def __unicode__(self): 
     return str(self.object_id) 

マイadmin.py

from django.contrib import admin 
from apps.webmachinist.media.models import * 
from apps.webmachinist.portfolio.models import * 
from django.contrib.contenttypes import generic 

class GalleryInline(generic.GenericTabularInline): 
    model = Image 

class GalleryAdmin(admin.ModelAdmin): 
    inlines = [ 
     GalleryInline, 
    ] 

admin.site.register(Image) 
admin.site.register(Video) 
admin.site.register(Gallery, GalleryAdmin) 
admin.site.register(GalleryItem) 
admin.site.register(PortfolioEntry) 

です逆の方法でギャラリーを画像に追加する:

class GalleryInline(generic.GenericTabularInline): 
    model = GalleryItem 

class GalleryAdmin(admin.ModelAdmin): 
    inlines = [ 
     GalleryInline, 
    ] 

admin.site.register(Image, GalleryAdmin) 

ギャラリーのタイトルで選択できますが、インラインはGalleryItemsです しかし、それは私が望むものではありません。ギャラリーだけでなく、後の動画に画像を追加したいのです。

簡単にできますか?

答えて

1

Imageをインライン化するのではなく、GalleryItemとする必要があります。その後、各GalleryItemから、それを汎用外部キーを通して何でも関連付けることができます。

+0

私はそれを試みましたが、 'GalleryItem' content_typeは' Gallery'を指しています。どういうわけか、 'Gallery'に' Gallery'を添付したいと思っています。 – Memke

+1

これで、genericinlineを使用しないでください – Memke

関連する問題