Django ModelChoiceField queryset不从db返回实际值

时间:2016-07-28 09:11:28

标签: django django-models django-forms django-queryset

我的模特是:

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
RadioButton附近的ActionType object。 谁能告诉我我的错误在哪里。

2 个答案:

答案 0 :(得分: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时才需要python_2_unicode_compatible装饰器。有关详细信息,请参阅__str__文档。

答案 1 :(得分: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/)。