Django-fr

Forum

#1 28-10-2011 08:36:40

sesame
Membre
Inscription : 22-03-2011
Messages : 263

rajouter un element a une liste

bonjour

j'aimerai via l'admin rajouter (creer) un  (nouvel) element a une liste definie comme suit

PROPRIETE sad
       ('resistivite electrique', 'resistivite electrique'),
       ('point de Curie', 'point de Curie'),
       ('constante dielectrique', 'constante dielectrique'),
       )


UNIT sad
    ('GPa', 'GPa'),
    ('MPa', 'MPa'),
    ('m2/s', 'm2/s'),
   )


class Property(models.Model):
    name = models.CharField(_('name'), max_length=50)
    description = models.TextField(_('description'), blank=True)
   
    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name = _('property')
        verbose_name_plural = _('properties')
        ordering = ['name']



class UniteProperty1(models.Model):
    name = models.ForeignKey(Material, verbose_name=_('name'))                                   
    nature_unit = models.ForeignKey(Property, verbose_name=_('nature_unit'))                     
    val_champ = models.CharField(_('val_champ'), max_length=150, choices = PROPRIETE)           
    val1= models.FloatField(blank=True, null=False)                                             
    val2= models.FloatField(blank=True, null=False)                                               
    val_unit = models.CharField(_('val_unit'), max_length=50, choices = UNIT)   

     def __unicode__(self):
        return '%s'  % (self.name)

    class Meta:
        verbose_name = _('parameter')
        verbose_name_plural = _('parametres')
        ordering = ['nature_unit']


dans l'admin si je cree une nouvelle propriete, je suis oblige d'attrbuer a cette propriete ce qui est defini dans la liste PROPRITE

si je veux que pour cette propriete, j'ai un autre choix que resistivite electrique  ....etc comment doit on s'y prendre  ?

Hors ligne

#2 28-10-2011 14:33:45

Vincent
Membre
Inscription : 08-08-2011
Messages : 20

Re : rajouter un element a une liste

Plop,

Le plus rapide, tu rajoute tes éléments dans la liste PROPRIETE.

Ça se tient si tu sera toujours la, et assez sympa pour modifier le code dès que quelqu'un veut un nouvel élément...

Donc le mieux c'est de passer par un autre model avec juste un charfield ça te donne une liste d'éléments modifiables (A voir : list_editable pour éditer directement les champs depuis le changelist de l'admin)

Pour lier la liste à ton modèle tu peux passer par une fk... Donc ça reste une fk, l'SQL peut vite devenir lourdingue dans l'admin sans le patch du ticket #14396 (si ta fk est à null=True l'admin fera une requête pour chaque objet de ta change_list) de plus les éléments peuvent être modifié facilement, même pour ceux déjà enregistrés.

À voir aussi, un boolean pour supprimer l'utilisation de l'élément dans ton projet (sans perdre l'info) via limit_choices_to et aussi on_delete.

On sinon, si on veut garder le charfield, on peut utiliser ça :
http://djangosnippets.org/snippets/26
Mais on perd la modification des éléments pour les objets déjà enregistrés... (à moins de faire une tite usine à gaz je pense)

Bref ça dépend des cas d'utilisation et de ce qu'on veut... Les fk c'est très très vite fait en tout cas.

Si quelqu'un a un autre avis/solution plus propre je suis fortement intéressé!

Hors ligne

#3 29-10-2011 04:45:53

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : rajouter un element a une liste

merci, je vais tester la solution de passer par un autre modele

Hors ligne

Pied de page des forums