J'ajoute la recherche à un site Django existant, en utilisant Haystack avec un backend Solr. Je souhaite que ma recherche fonctionne sur plusieurs modèles différents et renvoie un seul ensemble de résultats. Lors de l'itération des résultats, je voudrais formater chaque résultat en fonction du type de modèle, par exemple:Haystack résultats de la recherche: comment utiliser différents modèles pour différents modèles dans page.object_list?
Si le résultat est un Apple, utilisez un modèle de résultat, mais si c'est un Orange, utilisez un modèle différent.
Jusqu'à présent, je suis en train d'utiliser une version légèrement modifiée de l'exemple search template. Dans le modèle, les résultats sont disponibles en page.object_list:
{% if page.object_list %}
<ul>
{% for result in page.object_list %}
<li>
{% if (isinstance(result.object, Apple)) %}
Apple: {{ result.object.titlefield_for_apple }}
{% else %}
Orange: {{ result.object.otherfield_for_orange }}
{% endif %}
</li>
{% endfor %}
</ul>
{% else %}
<p>No results found.</p>
{% endif %}
Cela ne fonctionne pas, apparemment parce que isinstance() n'est pas disponible à l'intérieur d'un modèle. Alors, comment puis-je contrôler la logique de modèle en fonction du type de modèle d'un objet? Y at-il une autre fonction que je peux utiliser à l'intérieur d'un modèle qui fait la même chose?
Je suppose que je pourrais tester différents champs de l'objet (if result.object.otherfield_for_orange
) pour l'identifier, mais cela semble inélégant. Je parie que cela pourrait être fait avec des balises de modèles personnalisés, mais je n'ai aucune expérience avec ceux-ci.