Bonjour,
J’essaie de créer un flux de syndication commun à plusieurs models de ma base de données.
Ce code fonctionne :
class RssBlogFeed(BaseRssFeed):
title = "Blog"
link = "http://127.0.0.1:8000/blog/"
description = "Toutes les publications"
def items(self, publication):
articles = Article.objects.filter(hidden=False).only(
'title',
'_html_description',
'pub_date'
)
author = Value("matt", CharField(max_length=64))
webmarks = Webmark.objects.only(
'title',
'_html_description',
'pub_date')
news = New.objects.only(
'title',
'_html_description',
'pub_date')
return articles.union(webmarks, news).order_by('-pub_date')
Mais j’aimerai que le flux précise l’auteur de l’article. Les webmark et les news n’ont pas d’auteur (ce sont des liens externes)
Donc :
class RssBlogFeed(BaseRssFeed):
title = "Blog"
link = "http://127.0.0.1:8000/blog/"
description = "Dernieres publications"
def items(self, publication):
articles = Article.objects.filter(hidden=False).only(
'title',
'_html_description',
'pub_date',
'author'
)
author = Value("default_author", CharField(max_length=64))
webmarks = Webmark.objects.annotate(author=author).only(
'title',
'_html_description',
'pub_date')
news = New.objects.only(
'title',
'_html_description',
'pub_date').annotate(author=author) # Résultat identique si annotate après only, ça ne change rien.
return articles.union(webmarks, news).order_by('-pub_date')
Et là patatra :
django.db.utils.ProgrammingError: ERREUR: les UNION types text et timestamp with time zone ne peuvent pas correspondre
LINE 1: ...mark"."title", "blog_webmark"."html_description", "blog_webm...
Qu’est-ce que j’ai mal fait ?
+0
-0