2016-06-25 1 views
-1

Django 1.9.7DetailView et modèles

Pourriez-vous me aider à trois questions sur DetailView:

  1. Pourquoi DetailView ne met pas la forme dans le contexte alors que CreateView fait? Je veux dire qu'il est très difficile d'écrire un modèle où chaque champ est affiché séparément comme object.headline ou object.content. Dans le cas de CreateView, nous plaçons simplement {{form.as_p}} dans le modèle. Beaucoup plus pratique. Donc, il doit y avoir une certaine logique derrière la scène que je ne peux pas sentir à cause du manque d'expérience.

  2. Y at-il une des applications tierces avec prêt à utiliser les balises de modèle pour DetailView? Ou autre chose pour automatiser cette sélection de champs à afficher dans le modèle.

  3. Ou devrais-je mettre juste une forme moi-même dans get_context_data?

+2

Pourquoi est-ce que DetailView, qui consiste à afficher, fait quoi que ce soit avec une forme? –

+0

Pardon. Pourriez-vous jeter un oeil à mon commentaire à la première réponse. – Michael

Répondre

0

DetailView n'est pas conçu pour être édité. Utilisez UpdateView à cette fin.

Si vous souhaitez afficher chaque champ dans la même boucle de format sur eux, vous devez passer vos noms de champs dans le contexte comme une liste, puis une boucle sur cette liste:

{% for field_name in field_names %} 
    <tr> 
    <th>{% get_field_label object field_name %}</th> 
    <td>{% get_field_value object field_name %}</td> 
    </tr> 
{% endfor %} 

Et créer des balises de modèle personnalisés :

@register.simple_tag 
def get_field_label(obj, name): 
    return obj._meta.get_field(name).verbose_name 

@register.simple_tag 
def get_field_value(obj, name): 
    return getattr(obj, value) 
+0

Pardon pour le formulaire. Eh bien, je n'ai pas besoin de mise à jour. Je ne veux pas sélectionner manuellement tous les champs de l'objet. Y a-t-il une méthode pour cela? – Michael