Vous n'êtes pas identifié(e).
bonjour
j'aimerai via l'admin rajouter (creer) un (nouvel) element a une liste definie comme suit
PROPRIETE
('resistivite electrique', 'resistivite electrique'),
('point de Curie', 'point de Curie'),
('constante dielectrique', 'constante dielectrique'),
)
UNIT
('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
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
merci, je vais tester la solution de passer par un autre modele
Hors ligne