无法获取模型对象以在django管理页面

时间:2016-12-09 17:16:20

标签: python django django-queryset

我的models.py:

class Departement(models.Model):
    departNumber = models.PositiveSmallIntegerField(default=0, primary_key= True)
    departName = models.CharField(max_length=100)

    def __unicode__(self):
        return self.departNumber

我的admin.py:

class DepartementAdmin(admin.ModelAdmin):
    list_display = ('departNumber', 'departName')

admin.site.register(Departement, DepartementAdmin)

问题是,我无法获得任何“Departement”对象。我尝试过.get(),. filter()或.all()。在这两种情况下,它都会返回并且不会打印部门编号。

<Departement: Departement object>

我做错了什么?

编辑:更具体地说,在数据库中,我有一个包含部门名称和编号的表“Departement”。例如,如果我输入:

Departement.objects.filter(departNumber=2)

它应该给我一个“Var”的离开名称,因为“Var”是以2作为主键的部门。

2 个答案:

答案 0 :(得分:0)

__unicode__更改为__str__方法并查看。它应该与python 3一起使用。

class Departement(models.Model):
    departNumber = models.PositiveSmallIntegerField(default=0, primary_key= True)
    departName = models.CharField(max_length=100)

    def __str__(self):
        return self.departNumber

为了使它与python 2兼容,你可以做以下建议: https://docs.djangoproject.com/en/1.10/ref/models/instances/

答案 1 :(得分:0)

你说:

  

Departement.objects.filter(departNumber=2)应该给我一个离开名称   那是&#34; Var&#34;自从&#34; Var&#34;是以2为主键的部门。

因此,您依靠__unicode__方法返回部门名称(即使您__unicode__方法的实现当前返回部门编号)。

为什么不直接访问该属性?

dept = Departement.objects.filter(departNumber=2)
dept.departName

从长远来看,它使代码更易于维护。

但要回答为什么它无法正常工作,我们需要知道你是否使用python 2或3。

如果为3,则按照此处所述将方法名称更改为__str__Why __unicode__doesn't work but __str__ does?