Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 订单查询按条带标记设置(html字符串)_Python_Html_Django_Sorting_Strip Tags - Fatal编程技术网

Python 订单查询按条带标记设置(html字符串)

Python 订单查询按条带标记设置(html字符串),python,html,django,sorting,strip-tags,Python,Html,Django,Sorting,Strip Tags,在django应用程序中,我必须按字符串属性对查询集进行排序。这很简单。但是这个字符串属性有HTML标记,我需要去掉这些标记进行排序 class Publication(models.Model): authors = models.CharField() 我知道queryset.order_by()方法,但据我所知,我无法使用任何方法剥离那里的html 我已经想出了一个“几乎解决方案” >>来自django.utils.html导入条带标签 >>>已排序(Publication.ob

在django应用程序中,我必须按字符串属性对查询集进行排序。这很简单。但是这个字符串属性有HTML标记,我需要去掉这些标记进行排序

class Publication(models.Model):
    authors = models.CharField()
我知道queryset.order_by()方法,但据我所知,我无法使用任何方法剥离那里的html

我已经想出了一个“几乎解决方案”

>>来自django.utils.html导入条带标签
>>>已排序(Publication.objects.all(),key=strip_标记('authors'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
包装中的文件“/var/www/cms/venv2.7.5/lib/python2.7/site packages/django/utils/functional.py”,第203行
返回函数(*args,**kwargs)
文件“/var/www/cms/venv2.7.5/lib/python2.7/site packages/django/utils/html.py”,第156行,带标签
如果不是(“”值):
TypeError:类型“operator.attributer”的参数不可iterate
如何对该查询集进行排序?我的方法正确吗?效率高吗?这些queryset当前最多有+-1500个元素长

提前谢谢

.浸泡

试试这个

sorted(Publication.objects.all(), key=lambda x: x[strip_tags('authors')])
或者使用
操作符.itemgetter

import operator
key=operator.itemgetter('authors')

Publication.objects.all().order_by(strip_tags('authors')) #ascending
Publication.objects.all().order_by('-'+strip_tags('authors')) #descending
试试这个

sorted(Publication.objects.all(), key=lambda x: x[strip_tags('authors')])
或者使用
操作符.itemgetter

import operator
key=operator.itemgetter('authors')

Publication.objects.all().order_by(strip_tags('authors')) #ascending
Publication.objects.all().order_by('-'+strip_tags('authors')) #descending
试试这个

sorted(Publication.objects.all(), key=lambda x: x[strip_tags('authors')])
或者使用
操作符.itemgetter

import operator
key=operator.itemgetter('authors')

Publication.objects.all().order_by(strip_tags('authors')) #ascending
Publication.objects.all().order_by('-'+strip_tags('authors')) #descending
试试这个

sorted(Publication.objects.all(), key=lambda x: x[strip_tags('authors')])
或者使用
操作符.itemgetter

import operator
key=operator.itemgetter('authors')

Publication.objects.all().order_by(strip_tags('authors')) #ascending
Publication.objects.all().order_by('-'+strip_tags('authors')) #descending

这不会像你那样工作。
strip_标记
操作需要在数据库级别进行,而不是在Python中

我认为最有效的解决方案是在您的模型中添加一个字段,例如
authors\u stripped
,以存储与
authors
字段相同的内容,但从标记中删除。然后可以按该字段进行订购。 确保
作者
匹配
作者
的一种简单方法是覆盖模型的
保存
方法:

from django.utils.html import strip_tags


class Publication(models.Model):
    authors = models.CharField()
    authors_stripped = models.CharField(editable=False)

    def __save__(self,*args, **kwargs):
        if self.authors:
            self.authors_stripped = strip_tags(self.authors)
        super(Publication, self).save(*args, **kwargs)
authors
的值更改时,您可以使用找到的解决方案仅计算
authors


@itzmeontv提出的解决方案只有在您从数据库中检索所有出版物时才能起作用,这对于大数据集来说是一个效率问题。

这不会像您这样做。
strip_标记
操作需要在数据库级别进行,而不是在Python中

我认为最有效的解决方案是在您的模型中添加一个字段,例如
authors\u stripped
,以存储与
authors
字段相同的内容,但从标记中删除。然后可以按该字段进行订购。 确保
作者
匹配
作者
的一种简单方法是覆盖模型的
保存
方法:

from django.utils.html import strip_tags


class Publication(models.Model):
    authors = models.CharField()
    authors_stripped = models.CharField(editable=False)

    def __save__(self,*args, **kwargs):
        if self.authors:
            self.authors_stripped = strip_tags(self.authors)
        super(Publication, self).save(*args, **kwargs)
authors
的值更改时,您可以使用找到的解决方案仅计算
authors


@itzmeontv提出的解决方案只有在您从数据库中检索所有出版物时才能起作用,这对于大数据集来说是一个效率问题。

这不会像您这样做。
strip_标记
操作需要在数据库级别进行,而不是在Python中

我认为最有效的解决方案是在您的模型中添加一个字段,例如
authors\u stripped
,以存储与
authors
字段相同的内容,但从标记中删除。然后可以按该字段进行订购。 确保
作者
匹配
作者
的一种简单方法是覆盖模型的
保存
方法:

from django.utils.html import strip_tags


class Publication(models.Model):
    authors = models.CharField()
    authors_stripped = models.CharField(editable=False)

    def __save__(self,*args, **kwargs):
        if self.authors:
            self.authors_stripped = strip_tags(self.authors)
        super(Publication, self).save(*args, **kwargs)
authors
的值更改时,您可以使用找到的解决方案仅计算
authors


@itzmeontv提出的解决方案只有在您从数据库中检索所有出版物时才能起作用,这对于大数据集来说是一个效率问题。

这不会像您这样做。
strip_标记
操作需要在数据库级别进行,而不是在Python中

我认为最有效的解决方案是在您的模型中添加一个字段,例如
authors\u stripped
,以存储与
authors
字段相同的内容,但从标记中删除。然后可以按该字段进行订购。 确保
作者
匹配
作者
的一种简单方法是覆盖模型的
保存
方法:

from django.utils.html import strip_tags


class Publication(models.Model):
    authors = models.CharField()
    authors_stripped = models.CharField(editable=False)

    def __save__(self,*args, **kwargs):
        if self.authors:
            self.authors_stripped = strip_tags(self.authors)
        super(Publication, self).save(*args, **kwargs)
authors
的值更改时,您可以使用找到的解决方案仅计算
authors


@itzmeontv提出的解决方案只有在从数据库中检索所有出版物时才能起作用,这对于大数据集来说是一个效率问题。

Uhm,这是一个好问题。快到了!(TypeError:“Publication”对象没有属性“\u getitem””。operator.itemgetter的结果相同:-)您的第三个建议没问题,我是自己提出的。但是我怎样才能在那里剥离html标签呢?authors属性中充满了我们不希望用于排序的html垃圾。快到了!(TypeError:“Publication”对象没有属性“\u getitem””。operator.itemgetter的结果相同:-)您的第三个建议没问题,我是自己提出的。但是我怎样才能在那里剥离html标签呢?authors属性中充满了我们不希望用于排序的html垃圾。快到了!(TypeError:“Publication”对象没有属性“\u getitem””。operator.itemgetter的结果相同:-)您的第三个建议没问题,我是自己提出的。但是我怎样才能在那里剥离html标签呢?authors属性中充满了我们不希望用于排序的html垃圾。快到了!(TypeError:“Publication”对象没有属性“\u getitem””。operator.itemgetter的结果相同:-)您的第三个建议没有问题,我是通过