2016-07-28 46 views
-1

我的模型返回實際值是:
Django的ModelChoiceField查詢集並沒有從數據庫

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) 

在我的形式,我有:

class BankForm(forms.ModelForm): 

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

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

當這個被渲染爲HTML我沒有看到ActionType.objects.all()的實際值,但相反,我看到
ActionType object
ActionType object靠近RadioButton。 任何人都可以告訴我我的錯誤在哪裏。

+0

請問低調選民請評論並提及原因 – arminrock

+0

您正在退回參考。爲了避免它,你必須定義__str__,它設置你在調用對象時返回的內容。 –

回答

1

您需要爲您的模型定義一個__str__方法。例如:

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 

python_2_unicode_compatible裝飾時,才需要,如果你使用Python 2.見__str__文檔的更多信息。

1

我想這是因爲您沒有在您的ActionType模型上定義的__str__(self)__unicode__(self)方法。有關詳細信息,請參見https://docs.djangoproject.com/en/1.9/ref/models/instances/#str

但我強烈建議在TicketsFormActionType之間使用ForeignKey。另外,我不確定什麼需要定義您自己的私鑰;如果你沒有定義這些,Django會爲你生成它們。有關更多詳細信息,請參閱教程(特別是型號上的https://docs.djangoproject.com/en/1.9/intro/tutorial02/)。