2017-04-20 4 views
3

Ich habe diese Modelle:django many-to-many-Show für Menschen lesbaren in Form

CURSES=(('python','Python'),('django','Django'),...) 
class Asig(models.Model): 
    ... 
    name = models.CharField(max_length=100, choices=CURSES) 

class Profesor(AbstractUser): 
    ... 
    asigs = models.ManyToManyField(Asig) 

Dann, wenn ich das Formular mit Modelform der many-to-many-Feld zeigt sich mit 'Python' string machen statt 'Python', auch, wenn ich die gerenderte hTML sehen die Multiselect-Optionen codiert wie folgt aussehen:

<option value='1'>python</option> 

statt

<option value='python'>Python</option> 

Antwort

2

Wenn Sie den Wert ‚Python‘ in das Modell der __str__, Methode verwenden möchten, dann sollten Sie self.get_name_display() anstelle von self.name:

class Asig(models.Model): 
    ... 
    name = models.CharField(max_length=100, choices=CURSES) 

    def __str__(self): 
     # use @python_2_unicode_compatible or define __unicode__ if using Python 2 
     return self.get_name_display() 

Sie können nicht einfach many-to-many-Feld value='python' ändern verwenden statt value='1' (der Primärschlüssel). So arbeiten viele-zu-viele-Felder.

+0

get_name_display() es geht um den Feldnamen? Wenn mein Feldname Blumen wäre, dann könnte get_flowers_display() sein? –

+1

Das ist richtig. Weitere Informationen finden Sie in der Dokumentation zu [get_FOO_display() '] (https://docs.djangoproject.com/en/1.11/ref/models/instances/#django.db.models.Model.get_FOO_display). – Alasdair

Verwandte Themen