¿Cómo editar objetos en línea con relación genérica inversa en el panel de administración?

StackOverflow https://stackoverflow.com/questions/8839287

Pregunta

Me gustaría poder agregar objetos de imagen en línea a la galería en admin (como lo intento en admin.py a continuación). El problema es que el modelo de imagen no tiene campo content_type. Plantea excepción. Me gustaría hacer lo mismo con los objetos de videos. Aquí están mis modelos.py y admin.py y más descripción a continuación

Mis modelos.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)  

Mi 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)

Puedo hacerlo fácilmente de manera inversa: para agregar galería a una imagen, así:

class GalleryInline(generic.GenericTabularInline):
    model = GalleryItem

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

admin.site.register(Image, GalleryAdmin)

Luego puedo elegir por título de la galería, aunque en línea es para Galleryitems, pero no es lo que quiero. Solo quiero agregar imágenes a las galerías (y videos posteriores), no galerías a las imágenes.

¿Se puede hacer fácilmente?

¿Fue útil?

Solución

No deberías estar en la insulta Image, pero más bien GalleryItem. Entonces de cada uno GalleryItem Puede asociarlo con lo que sea a través de su clave extranjera genérica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top