2010-06-14 7 views
1

J'utilise l'héritage de modèle pour gérer un plusieurs modèles queryset:héritage du modèle et RSS cadre

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 

Un modèle conditionnel est suffisant pour rendre les extraits de droite html avec une vue basée sur Entry.objects .Toutes():

{% 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] 

maintenant, je suis en train de générer un flux RSS en utilisant le nouveau cadre d'alimentation en vedette dans Django 1.2, mais sans succès ... les paramètres succint du cadre ne font pas permettez-moi de spécifier conditionnel item_title et item_description sur la base des objets enfants d'entrée:

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... 

Dois-je créer une vue personnalisée-modèle défini pour gérer la création de flux RSS et syndication ou est-il un moyen d'utiliser le cadre d'alimentation avec ce modèle sous-classé?

Répondre

2

Vous avez deux options:

  1. utiliser les attributs title_template et description_template sur la classe d'alimentation pour pointer vers des modèles qui peuvent gérer une variable d'entrée très générique. Recréez votre logique de modèle dans les méthodes de la classe de flux afin que votre variable de modèle obtienne une donnée normalisée.

L'un ou l'autre vous conduira au même point final.

+0

Merci Gabriel. Option 1) a bien fonctionné. En fait j'ai vu les docs mais j'ai mal compris le point. A propos de l'option 2) - pour être honnête - je ne pense pas que je comprends complètement ce que vous vouliez dire. Cependant ... Merci beaucoup! – Matteo