2012-09-13 110 views
0

我正在使用Django的网站上工作。Filter()关键字必须是字符串

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

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 

和我我无法理解它。

回答

1

全追踪本来是有用的。

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

+0

非常感谢您的回复,它解决了问题!你是个天才! 我对related_name的理解不正确。我将回到文档。 下一次我会给回溯;) 非常感谢 – trnsnt

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')) 
+0

非常感谢您的回复。 它不能解决问题,但它解决了我有关图像显示的其他问题。没有它,图像不显示。 谢谢 – trnsnt

相关问题