小编Fél*_*lix的帖子

Django haystack multivalued不起作用

我已经为我的索引(haystack)添加了一个MultivaluedField,我需要搜索ManyToMany相关字段,但它不起作用.

该引擎是WHOOSH.

这是我的索引的样子:

 class PostIndex(SearchIndex):
     text = CharField(document=True, use_template=True)
     author = CharField(model_attr='author') 
     body = CharField(model_attr='body') 
     pub_date = DateTimeField(model_attr='publish') 
     regions = MultiValueField() 

 def prepare_regions(self, obj):
     return [region.name for region in obj.regions.all()]
Run Code Online (Sandbox Code Playgroud)

这就是我的模型的样子:

 class Post(models.Model):

     title           = models.CharField(_('title'), max_length=200)
     author          = models.ForeignKey(User, blank=True, null=True)
     body            = models.TextField(_('body'), )
     allow_comments  = models.BooleanField(_('allow comments'), default=True)
     publish         = models.DateTimeField(_('publish'), default=datetime.datetime.now)
     categories      = models.ManyToManyField(Category, blank=True)
     tags            = TagField()
     objects         = PublicManager()

     regions         = models.ManyToManyField(Region, blank=True)
Run Code Online (Sandbox Code Playgroud)

如果我使用SearchQuerySet().filter(region__in = words_list)它可以工作.问题是我不知道用户何时搜索某个区域或其他字段,因此我必须使用SearchQuerySet().filter(content__icontains = words_list).并且以这种方式找不到任何东西.

谢谢

谢谢!!

django multivalue whoosh django-haystack

6
推荐指数
1
解决办法
1743
查看次数

使用kombu重试发布消息的最佳方法是什么?

我正在测试kombu的工作原理.我打算在几个项目中取代鼠兔.我看到kombu有很多文档,但使用我在文档中找到的一些消息丢失了.这是代码:

from kombu import Connection, Producer
conn = Connection('amqp://localhost:5672')
def errback(exc, interval):
     logger.error('Error: %r', exc, exc_info=1)
     logger.info('Retry in %s seconds.', interval)
producer = Producer(conn)
publish = conn.ensure(producer, producer.publish, errback=errback, max_retries=3)
for i in range(1, 200000):
   publish({'hello': 'world'}, routing_key='test_queue')
   time.sleep(0.001)
Run Code Online (Sandbox Code Playgroud)

当它发布时我多次关闭连接并继续发布但在队列中有大约60000条消息,所以有很多丢失的消息.

我尝试了不同的替代品,例如:

publish({'hello': 'world'}, retry=True, mandatory=True, routing_key='hipri')
Run Code Online (Sandbox Code Playgroud)

谢谢!

python kombu

6
推荐指数
1
解决办法
1888
查看次数

在python中覆盖{}

我想创建一个dict int,你可以这样访问:

>>> my_dict["property'] = 3
>>> my_dict.property
3
Run Code Online (Sandbox Code Playgroud)

所以我做了这个:

class DictAsMember(dict):
    def __getattr__(self, name):
        return self[name]
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果你有嵌套dicts它不起作用,例如:

my_dict = DictAsMember()
my_dict["property"] = {'sub': 1}
Run Code Online (Sandbox Code Playgroud)

我可以访问my_dict.property,但逻辑上我不能做my_dict.property.sub因为属性是一个默认的dict,所以我想要做的就是覆盖默认的dict,所以你可以使用{}.

这可能吗?

python dictionary overwrite

3
推荐指数
1
解决办法
1409
查看次数

用pytest执行几次测试

有没有办法用py.test运行测试x次?

我正在寻找的是多次重复测试,因为测试有随机装置.

像py.test -n100之类的东西

我一直在玩pytest-xdist,但如果我理解得很好,它只会在cpus中分发测试.

python pytest

3
推荐指数
1
解决办法
1536
查看次数