为了账号安全,请及时绑定邮箱和手机立即绑定

Django elasticsearch-dsl pre_save上更新M2M

Django elasticsearch-dsl pre_save上更新M2M

Qyouu 2022-09-13 10:08:38
我正在使用django-弹性搜索-dsl包,并且有点进退两难。这是我的代码:models.pyclass Source(models.model):    name = models.CharField(max_length=50)class Posting(models.Model):    title = models.CharField(max_length=250)    sources = models.ManyToMany(Sources, related_name="postings", through="PostingSource")class PostingSource(models.Model):    posting = models.ForeignKey(Posting, related_name="posting_sources", on_delete=models.CASCADE)    source = models.ForeignKey(Source, related_name="posting_sources", on_delete=models.CASCADE)documents.pyclass PostingDocument(Document):    sources = fields.ObjectField(properties={"name": fields.KeywordField()})    class Index:        name = "posting"        settings = {"all the settings stuff"}    class Django:        model = Posting        fields = ["title"]        related_models = [PostingSource]    def get_queryset(self):        return super().get_queryset().select_related("sources")    def get_instance_from_related(self, related_instance):        if isinstance(related_instance, PostingSource):            return related_instance.posting我的问题是,当我更新帖子上的来源时,由于某种原因,弹性搜索索引pre_save更新,而不是post_save。我基本上必须使用相同的来源进行2次放置请求,以使更改反映在我的索引中。我在文档中添加了 一个,它似乎可以正常工作,但感觉它以后会导致性能问题。任何帮助或指导将不胜感激。def prepare_sources(self, instance):
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

经过几个月的测试,我通过添加一个我将我的多对多关系非规范化的地方解决了我的第一个问题。我也通过简单地拥有有助于性能的解决了我的第二个问题。def prepare_sources(self, instance):.select_related("sources")



查看完整回答
反对 回复 2022-09-13
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信