Filter()关键字必须是字符串

时间:2012-09-13 09:47:13

标签: django django-admin manytomanyfield

我正在与Django合作开发一个网站。

我创建了两个模型,一个用于照片,另一个用于一个人。

class Photo(models.Model):    
    photo  = models.ImageField(upload_to = 'toto')
    description = models.CharField(_('Description'), max_length = 250)
    people = models.ManyToManyField('Person', related_name = _('Person'))

    def display_img(self):
        return u'<img src="%s" /> - %s - %s' % (self.photo, self.description, self.people )

    display_img.allow_tags = True

class Person(models.Model):
    name = models.CharField(_('Name'), max_length = 50)

在我看来,我想要的是能够在照片上标记人物。

我的问题是,当我想要修改/查看时,我能够使用管理员创建新照片(http://127.0.0.1:8000/admin/module/photo/1/)我得到这个错误:

Django Version: 1.4.1
Exception Type: TypeError
Exception Value:    
filter() keywords must be strings
Exception Location: C:\Python26\Lib\site-packages\django\db\models\fields\related.py in get_query_set, line 543

我无法理解。

2 个答案:

答案 0 :(得分:1)

完整的回溯本来是有用的。

我希望问题来自related_name字段中的people属性。您已将此标记为翻译,但这没有任何意义:这是您在代码中使用的属性,而不是公共消费的属性。取出_()电话。

答案 1 :(得分:0)

photo是对象,但您希望将其设为str

return u'<img src="%s" /> - %s - %s' % (self.photo, self.description, self.people )

您需要url attr:

return u'<img src="%s" /> - %s - %s' % (self.photo.url, self.description, self.people )

关于people的解决方案:

people = models.ManyToManyField(PersonModel, related_name = _('Persons'), verbose_name=_('Person'))