ModelChoiceForm没有显示任何值

时间:2016-03-08 01:21:11

标签: python django

我的Apuntes文件中有一个此模型models.py

class Apuntes(models.Model):
    PRIVACY_CHOICES=(
        ('public', 'Público'),
        ('private', 'Privado'),
        ('password', 'Protegido')
    )
    owner=models.ForeignKey(User)
    privacy=models.CharField("Privacidad", max_length=10, choices=PRIVACY_CHOICES, default='private')
    password=models.CharField("Contraseña", max_length=20, blank=True)
    asignatura=models.ForeignKey(Asignaturas)
    datos=models.FileField()
    descripcion=models.CharField(max_length=150)
    added=models.DateTimeField(auto_now=True)

我还在ApuntesForm中使用此模型forms.py创建了一个表单:

class ApuntesForm(forms.ModelForm):
    class Meta:
        model = Apuntes
        fields = ['privacy', 'password', 'asignatura', 'datos', 'descripcion']
        widgets = {
            'descripcion': forms.Textarea(attrs={'class': 'form-control'}),
            'privacy': forms.Select(attrs={'class': 'form-control'}),
            'password': forms.PasswordInput(attrs={'class': 'form-control'}),
            'asignatura': forms.Select(attrs={'class': 'form-control'}),
        }

当我尝试在视图中使用此表单时,Asignaturas选择字段无法正常显示:

Look here

我希望它在数据库中显示nombre列,而不仅仅是通用对象。

2 个答案:

答案 0 :(得分:1)

试试这个......

class Asignaturas(models.Model):
    ...
    #your fields
    ...
    nombre = models.CharField(max_length=255)

    def __unicode__(self):
        return self.nombre

答案 1 :(得分:1)

来自文档:

  

__str__

     

Model.__str__()无论何时,都会调用__str__()方法   在对象上调用str()。 Django在许多地方使用str(obj)。   最值得注意的是,在Django管理站点中显示一个对象并作为   值在显示对象时插入到模板中。因此,您   应该总是返回一个很好的,人类可读的表示形式   来自__str__()方法的模型。

     

例如:

from django.db import models 
from django.utils.encoding import python_2_unicode_compatible`

@python_2_unicode_compatible  # only if you need to support Python 2
class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    def __str__(self):
        return '%s %s' % (self.first_name, self.last_name) 
  

如果您想要与Python 2兼容,您可以装饰您的模型类   如上所示python_2_unicode_compatible()

Puam的答案可以在Python 2.7中使用,但是如果你在3中,你会想要阅读 str unicode Django docs中的方法部分' Port to Python 3