Django / Python新手在这里。
让我们使用本页django书中的示例表:http://www.djangobook.com/en/2.0/chapter10/
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
以下是用于访问Author表的示例过滤器语句:
a = Author.objects.get(first_name='Adrian', last_name='Holovaty')
如果我在单独的变量中没有名字和姓氏怎么办?如果我只有整个名字怎么办?我想做这样的事情:
aName = 'Adrian Holovaty'
a = Author.objects.get(Author.self=aName)
我正在寻找以某种方式访问该对象表示“属性”。当然,我可以在空间上拆分aName并执行上面的查找。但是,如果不清楚如何拆分整个名字呢?假设我试图分裂像“纽约尼克斯”或“Rip Van Winkle”这样的东西?在第一个例子中,first_name将是“New York”,而在第二个例子中它将只是“Rip”。
答案 0 :(得分:1)
你不能这样做的原因是__unicode__
在Python中评估,使用查询集的SQL选择的数据。
因此,数据库无法预测Python方法__unicode__
生成的值。
那说,有很多方法:
如果您依靠django-haystack进行搜索,则可以将{{ object }}
的{{1}}放在模型类的模板中。然后,您可以按object.__unicode__
输出启用搜索。
将cached_unicode CharField添加到模型中,使用pre_save signal receiver(覆盖save() method)更新self.cached_unicode,然后可以过滤(cached_unicode ='Foo Bar')
SQL CONTACT使用Author.objects.raw()(author.first_name,'',author.last_name)='Foo Bar'或author_queryset.extra()
答案 1 :(得分:0)
只需在您的类中添加getbyname
方法即可拆分名称并执行查询。完成工作。