2017-03-14 4 views
0

J'ai un modèle où un champ fait référence à une clé étrangère d'un autre modèle comme:rendu champ étranger sous forme de django

class DummyModel(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.CharField(max_length=150)   
    image_type = models.ForeignKey(ImageTypeModel) # Foreign key 

    class Meta: 
     db_table = "dummy" 

Le modèle parent est aussi simple:

class ImageTypeModel(models.Model): 
    name = models.CharField(max_length=100) 
    dims = models.IntegerField() 

    class Meta: 
     db_table = "imagetypes" 

Maintenant, je tente pour rendre un enregistrement sous une forme et à cette fin j'utilise django-crispy-forms. Donc, j'ai:

class DummyForm(ModelForm): 
    class Meta: 
     model = DummyModel 
     fields = ['name', 'description', 'image_type'] 

    def __init__(self, *args, **kwargs): 
     super(DummyForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper(self) 
     self.helper.form_class = 'form-horizontal' 
     self.helper.label_class = 'col-sm-2' 
     self.helper.field_class = 'col-sm-10' 
     #self.helper.form_tag = False 
     self.helper.layout = Layout(
      Field('name'), 
      Field('description'), 
      Field('image_type')) 

Le champ image_type rend comme une liste déroulante qui est parfait, mais au lieu du nom des types d'image, les entrées sont tous étiquetés ImageTypeModel. Y at-il un mécanisme pour que je puisse afficher le nom correspondant de l'enregistrement ImageTypeModel mais lorsque le formulaire est enregistré, il enregistre la clé primaire plutôt que le nom.

+1

Avez-vous mis en œuvre la méthode '__unicode__' (pour Python 2) ou' __str__' (python 3) à l'intérieur du modèle 'de ImageTypeModel'? –

+0

hmmmmmm ... non. Ok, je ne savais pas que je devais le faire! – Luca

+0

Cela a fait l'affaire! Voulez-vous l'écrire comme réponse pour que je puisse l'accepter?> – Luca

Répondre

2

Vous devez implémenter la méthode (python 2) ou __str__ (python 3) dans le modèle.

Comme ceci:

class ImageTypeModel(models.Model): 
    name = models.CharField(max_length=100) 
    dims = models.IntegerField() 

    class Meta: 
     db_table = "imagetypes" 

    # For Python 2 
    def __unicode__(self): 
     return self.name 

    # For Python 3 
    def __str__(self): 
     return self.name