2009-11-15 5 views
0

J'ai plusieurs modèles abstraits semblables à ceobject_list de plusieurs modèles dans django

Class Article(models.Model): 
    title = models.CharField() 
    body = models.TextField() 
    created_date = models.DateTimeField() 
    author_name = models.CharField() 

class Video(models.Model): 
    title = models.CharField() 
    body = models.TextField() 
    created_date = models.DateTimeField() 
    video_asset = models.CharField() 

maintenant sur une page spécifique, je voudrais regrouper ces deux modèles dans une liste en fonction de leur CREATED_DATE. Tous les modèles que je veux, je sais qu'il aura un title et un created_date donc je peux faire quelque chose comme ceci:

<ul> 
{% for object in object_list %} 
    <li>{{ object.title }} on {{ object.created_at }}</li> 
{% endfor %} 
</ul> 

Je peux compter sur ces champs d'être là sans problème.

J'ai pensé à créer un modèle supplémentaire et à utiliser des clés étrangères génériques. Un peu comme un modèle agrégé. alors chaque fois qu'un nouvel objet était créé, je signalais simplement l'un de ceux qui devaient être créés, puis tirais simplement de cette table générique. Je n'aime pas vraiment cette idée. Cela semble très redondant.

Avez-vous des questions?

mise à jour: Je trouve cette entrée Using django how can I combine two queries from separate models into one query? mais il ne fonctionnera pas dans mon cas que j'utilise classe abstraite modèle pour ces (je viens de na pas le montrer dans l'exemple de le garder simple et claire que possible). Je me suis intéressé à l'héritage au lieu de l'abstraction, mais je pensais que la performance sur les jointures constantes aurait un coût. Peut-être pas

Répondre

2

Il suffit de commander les deux modèles par created_date (ou created_at, vous avez utilisé les deux) et de fusionner les résultats dans une seule liste. Cette liste peut ensuite être utilisée dans votre modèle. Aucun modèle d'héritage de modèle ou modèle agrégé requis.

1

vous avez des fautes de frappe ... classe article devrait être classe Article Fix classe en classe (faire en minuscules)