Django-fr

Forum

#1 10-06-2013 12:57:39

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

champs

bonjour

voila le probleme

j'ai un modele dont certains champs d'une classe dependent d'une liste comme ceci

PHYSICS_CHOICES = (
    ('Mechanical', (
            ('Vickers hardness (GPa)', 'Vickers hardness (Gpa)'),
            ('Tensile Strength (GPa) ', 'Tensile Strength (GPa)'),
            ('Elasticity modulus (GPa)', 'Elasticity modulus (GPa)'),
            ('Shear Modulus (GPa)', 'Shear Modulus (GPa)'),
...........


val_champ = models.CharField(_('val_champ'), max_length=150, choices = PHYSICS_CHOICES)   


et dans l'admin, le champ val_champ apparait sous forme de liste deroulante avec toutes les composantes de PHYSICS_CHOICES

comment faut il proceder pour que ces composantes puissent etre definies directement dans l'admin de maniere a eviter d'ecrire en dur dans le code chaque fois que l'on veut rajouter une proprieté...

Hors ligne

#2 12-06-2013 07:09:50

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : champs

Bonjour,

La solution la plus simple est d'utiliser une ForeignKey vers un modèle qui contiendrait les données de PHYSICS_CHOICES. En revanche, la liste apparaitrait "à plat", c'est à dire sans la catégorisation "Mechanical".

Le documentation Django va dans ce sens (https://docs.djangoproject.com/en/dev/r … s/#choices):

Finally, note that choices can be any iterable object – not necessarily a list or tuple. This lets you construct choices dynamically. But if you find yourself hacking choices to be dynamic, you're probably better off using a proper database table with a ForeignKey. choices is meant for static data that doesn't change much, if ever.

En redéfinissant dynamiquement vos choices dans les formulaires à partir d'un modèle ça devrait être possible également bien que techniquement plus compliqué.

Hors ligne

#3 12-06-2013 12:46:24

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

Re : champs

c est ce que j'ai fait avec la classe Physic

class Physic(models.Model):
    lapropriete = models.CharField(_('lapropriete'), max_length=100)
    description = models.TextField(_('description'), blank=True)
   
    def __unicode__(self):
        return self.lapropriete

    class Meta:
        verbose_name = _('physic')
        verbose_name_plural = _('physics')
        ordering = ['lapropriete'] 

en definissant un des champs par

choix = models.ForeignKey(Physic, verbose_name=_('properties'), null=True, blank=True,  related_name='UniteProperty2_choix')

oui le probleme est qu'on perd le titre de la categorie et ca oblige a melanger toutes les proprietes (mecanique, thermique, optique, etc...)

mais c'est peut etre mieux que tout soit parametrable depuis l'admin

merci de votre reponse

Hors ligne

Pied de page des forums