2009-12-15 5 views
0

J'ai développé une application Django et il y a du code dupliqué pour différents modèles. Je souhaite créer un modèle de table générique et lui transmettre la classe Model, une liste d'instances de modèle et des classes Form afin qu'il puisse générer la page et générer les formulaires pour ajouter/supprimer des éléments. Créez ensuite des vues génériques d'ajout/suppression pour travailler avec ce formulaire.Modèle général Django contrôlé par quelles variables?

Quelle serait la bonne partie pour définir la configuration du modèle pour chaque modèle différent? Serait-il juste si je viens de créer des variables et des fonctions statiques classe comme:

class Test(models.Model): 
    # Model 
    name = models.CharField(max_length=20) 
    description = models.TextField(blank=True) 

    # Template configuration 
    title = "Test" 
    table_columns = ['name', ] # Columns I want to show in the table 

    def get_columns(self): 
     return [self.name, ] 

Ou est-il un moyen plus propre pour définir ce genre de choses dans Django?

EDIT: On dirait que certaines des informations que je veux utiliser pour configurer le Template ont déjà un nom et devraient aller dans model.Meta, comme verbose_name ou verbose_name_plural.

Répondre

0

Comme le dit MYYN, votre question n'est pas très claire. Cependant, je suppose que vous voulez faire ce qui suit:

  1. Créer un modèle générique
  2. charger Dynamiquement ce modèle basé sur le modèle et d'autres params passé
  3. Le tableau dans le modèle est rempli avec les formulaires nécessaires etc
  4. créer des vues, les formulaires à soumettre à

J'utiliser une balise de modèle personnalisé plutôt que incluant le code dans votre modèle (depuis sa purement une question de présentation, à savoir que vous aimerait avoir tous les champs disponibles dans le modèle mais en afficher seulement certains). Par exemple, vous pouvez créer une étiquette de modèle que vous appelez comme:

{% gen_table somemodel %} 

Documentation for template tags

lire également ce grand poste sur custom template tags et certains de mes sample code.

J'ai aussi remarqué que vous semblez définir une méthode personnalisée dans votre classe de modèle, mais je crois que la façon de le faire est de créer un custom model manager (lire this blog post), également un exemple peut être trouvé here

0

Je ne suis pas sûr de exaclty votre question et votre code, mais voici une courte histoire sur _meta ...

Pour accéder au nom de la colonne d'une classe, vous pouvez inspecter l'attribut _meta de la classe .

Exemple. Un modèle d'échantillon, qui définit trois champs et une des méthodes d'aide whats_inside, qui vient itère sur _meta.fields et imprime les noms des colonnes de la classe:

from django.db import models 

def whats_inside(cls): 
    for item in cls._meta.fields: 
     print item.name 

class Sample(models.Model): 

    name = models.CharField(max_length=80) 
    desc = models.CharField(max_length=80) 
    date_added = models.DateTimeField(auto_now=True, auto_now_add=True) 

Quand nous commençons à ./manage shell, nous pouvons appeler whats_inside avec Sample comme l'argument (note: ms est juste le paquet le modèle se trouve dans ce cas, le vôtre sera différent):

$ ./manage.py shell 
Python 2.6 (r26:66714, Oct 4 2008, 02:48:43) 
Type "copyright", "credits" or "license" for more information. 

IPython 0.9.1 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object'. ?object also works, ?? prints more. 

In [1]: from ms.models import Sample, whats_inside 

In [2]: whats_inside(Sample) 
id 
name 
desc 
date_added 

In [3]: 
+0

qui est utile merci, je ne connaissais pas _meta, mais dans ce cas je veux configurer les colonnes qui vont être montrées pour chaque modèle, pas toutes parce que dans certains cas il y a trop de colonnes ou certaines d'entre elles ne sont pas très instructives. Ma question est plus sur s'il existe un endroit standard pour mettre ce type de configuration d'un modèle générique pour tout modèle qu'il contient, et s'il n'y a pas de place standard alors si la définition du modèle est ok. – plmet

Questions connexes