Python 订单查询按条带标记设置(html字符串)
在django应用程序中,我必须按字符串属性对查询集进行排序。这很简单。但是这个字符串属性有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
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的结果相同:-)您的第三个建议没有问题,我是通过