我正在与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:Python26Libsite-packagesdjangodbmodelsfieldsrelated.py in get_query_set, line 543
我无法理解。
完整的回溯会很有用。
我认为问题来自于people
字段中的related_name
属性。您已经将其标记为翻译,但这毫无意义:这是您在代码中使用的属性,而不是供公众使用的属性。取出_()
呼叫。
photo
是对象,但您希望将其作为str
:
return u'<img src="%s" /> - %s - %s' % (self.photo, self.description, self.people )
您需要url
属性:
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'))