Я использую образцовое наследование для управления многоуровневыми моделями queryset:
from django.db import models
from django.contrib.sites.models import Site
from django.contrib.auth.models import User
from imagekit.models import ImageModel
import datetime
class Entry(models.Model):
date_pub = models.DateTimeField(default=datetime.datetime.now)
author = models.ForeignKey(User)
via = models.URLField(blank=True)
comments_allowed = models.BooleanField(default=True)
class IKOptions:
spec_module = 'journal.icon_specs'
cache_dir = 'icon/resized'
image_field = 'icon'
class Post(Entry):
title = models.CharField(max_length=200)
description = models.TextField()
slug = models.SlugField(unique=True)
def __unicode__(self):
return self.title
class Photo(Entry):
alt = models.CharField(max_length=200)
description = models.TextField(blank=True)
original = models.ImageField(upload_to='photo/')
def __unicode__(self):
return self.alt
class Quote(Entry):
blockquote = models.TextField()
cite = models.TextField(blank=True)
def __unicode__(self):
return self.blockquote
Условного шаблона достаточно для рендеринга правильных отрывков HTML с целью на основе Entry.objects.all ():
{% extends "base.html" %}
{% block main %}
<hr>
{% for entry in entries %}
{% if entry.post %}
[...do something with entry.post]
{% endif %}
{% if entry.photo %}
[...do something with entry.photo]
{% endif %}
[...and so on]
Теперь я пытаюсь генерировать канал RSS с помощью новой Платформы Канала, показанной в Django 1.2, но без любой удачи... Упрощенные настройки платформы не позволяют мне указать условное выражение item_title и item_description на основе дочерних объектов Записи:
from django.contrib.syndication.views import Feed
from totanus.journal.models import Entry, Photo, Post, Quote
class LatestEntriesFeed(Feed):
title = "RSS Feed"
link = "/journal/"
description = "Journal RSS"
def items(self):
return Entry.objects.order_by('-date_pub')[:10]
def item_title(self, item):
# if child is Post
return item.post.title # this isn't working, of course...
Я должен создать пользовательский набор шаблона представления для управления созданием RSS и синдикацией или являюсь там способом использовать платформу Канала с этой разделенной на подклассы моделью?
У вас есть два варианта:
использовать атрибуты title_template
и description_template
в классе Feed, чтобы указать на шаблоны, которые могут обрабатывать очень общие входная переменная.
Воссоздайте логику шаблона в методах класса канала, чтобы переменная шаблона получала нормализованный фрагмент данных.
Любой из них приведет вас к одной и той же конечной точке.