基于模型缺省表示的Django滤波

2024-10-02 16:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是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表的filter语句示例:

a = Author.objects.get(first_name='Adrian', last_name='Holovaty')

如果我在不同的变量中没有名字和姓氏呢?如果我把整个名字都写在一起呢?我想这样做:

aName = 'Adrian Holovaty'
a = Author.objects.get(Author.self=aName)

我想以某种方式访问对象表示“属性”。当然,我可以在空间上拆分一个名称,并按照上面的方式进行查找。但如果不太清楚如何分割整个名字呢?假设我想把“纽约尼克斯”或“瑞普范温克尔”之类的东西分开?在第一个例子中,第一个名字是“New York”,而在第二个例子中,它只是“Rip”。你知道吗


Tags: nameself示例getobjectsmodels名字length
2条回答

不能这样做的原因是__unicode__在Python中使用queryset的SQL选择的数据进行计算。你知道吗

因此,数据库无法预测Python方法__unicode__生成的值。你知道吗

也就是说,有很多方法:

  1. 如果依赖于django-haystack进行搜索,那么可以将{{ object }}作为object.__unicode__的结果放入模型类的模板中。然后,可以通过__unicode__输出启用搜索。

  2. 在模型中添加一个缓存的unicode字符域,使用pre_save signal receiver(覆盖save() method)来更新self.u unicode,则可以筛选(缓存的\u unicode='Foo Bar')

  3. 使用SQL CONTACT(作者姓名, ' ', 作者姓氏)='Foo Bar'带Author.objects.raw()或带author_queryset.extra()

只需向类中添加一个getbyname方法,该方法拆分名称并生成查询。工作完成了。你知道吗

相关问题 更多 >