2016-07-28 6 views
-1

Meine Modelle sind:
Django ModelChoiceField queryset kehrt nicht die tatsächlichen Werte von db

class ActionType(models.Model): 


    id_action_type = models.FloatField(primary_key=True) 
    action_name = models.CharField(max_length=15, blank=True, null=True) 


    class Meta: 
     managed = False 
     db_table = 'action_type' 

class TicketsForm(models.Model): 
    ticket_id = models.FloatField(primary_key=True) 
    ticket_type = models.CharField(max_length=30, blank=True, null=True) 
    action_type = models.CharField(max_length=15,blank=True, null=True) 

In meiner Form, ich habe:

class BankForm(forms.ModelForm): 

    action_type= forms.ModelChoiceField(queryset=ActionType.objects.all(),widget=forms.RadioSelect) 

    class Meta: 
     model = TicketsForm 
     fields = ('ticket_type', 
        'action_type',) 

Wenn dies gemacht wird, ich html nicht sehen die tatsächlichen Werte von ActionType.objects.all(), aber ich sehe stattdessen
ActionType objectActionType object in der Nähe von RadioButton. Kann mir jemand sagen, wo mein Fehler ist.

+0

Kann der down-voter bitte kommentieren und den Grund nennen – arminrock

+0

Sie geben eine Referenz zurück. Um dies zu vermeiden, müssen Sie __str__ definieren, wodurch festgelegt wird, was Sie zurückgeben, wenn Sie ein Objekt aufrufen. –

Antwort

1

Sie müssen eine __str__ Methode für Ihr Modell definieren. Zum Beispiel:

from django.utils.encoding import python_2_unicode_compatible 

@python_2_unicode_compatible 
class ActionType(models.Model): 
    id_action_type = models.FloatField(primary_key=True) 
    action_name = models.CharField(max_length=15, blank=True, null=True) 

    ... 

    def __str__(self) 
     return self.action_name 

Der python_2_unicode_compatible Dekorateur ist nur erforderlich, wenn Sie Python verwenden 2. Siehe die __str__ Dokumentation für weitere Informationen.

1

Ich nehme an, das liegt daran, dass Sie keine __str__(self) oder __unicode__(self) Methode für Ihr ActionType-Modell definiert haben. Einzelheiten finden Sie unter https://docs.djangoproject.com/en/1.9/ref/models/instances/#str.

Ich würde jedoch dringend empfehlen, einen ForeignKey in TicketsForm zu ActionType zu verwenden. Ich bin mir auch nicht sicher, was das Definieren Ihrer eigenen privaten Schlüssel erfordert; Wenn Sie diese nicht definieren, wird Django sie für Sie generieren. Weitere Informationen finden Sie in der Anleitung (speziell https://docs.djangoproject.com/en/1.9/intro/tutorial02/ bei Modellen).