Frage

Ich möchte in der Galerie Inline -Bildobjekte in admin hinzufügen können (wie ich es in admin.py unten probiere). Das Problem ist, dass das Bildmodell kein Content_Type -Feld hat. Es wirft eine Ausnahme auf. Ich möchte dasselbe mit Videosobjekten tun. Hier sind meine Modelle.py und admin.py und mehr Beschreibung unten

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

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

Ich kann es leicht in umgekehrter Weise tun: Galerie zu einem Bild wie folgt hinzuzufügen:

class GalleryInline(generic.GenericTabularInline):
    model = GalleryItem

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

admin.site.register(Image, GalleryAdmin)

Dann kann ich nach Galerie -Titel wählen, obwohl Inline für GalerieItems ist, aber es ist nicht das, was ich will. Ich möchte nur Bilder zu Galerien (und späteren Videos) hinzufügen, nicht Galerien zu Bildern.

Kann es leicht gemacht werden?

War es hilfreich?

Lösung

Sie sollten nicht einbinden Image, sondern eher GalleryItem. Dann von jedem GalleryItem Sie können es mit dem generischen Fremdschlüssel mit allem verbinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top