Djangoasticsearch-dsl обновление M2M на pre_save - PullRequest
0 голосов
/ 26 марта 2020

Я использую пакет django -elasticsearch-dsl, и у меня возникла небольшая дилемма. Вот мой код:

models.py

class 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.py

class 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

Моя проблема Когда я обновляю источники публикации, по какой-то причине, индексasticsearch обновляется pre_save, а не post_save. Я в основном должен выполнить запрос на поставку 2 раза с одними и теми же источниками, чтобы изменения отражались в моем индексе. Я добавил def prepare_sources(self, instance): как часть моего документа, и он, кажется, работает, но кажется, что позже это вызовет проблемы с производительностью. Буду очень признателен за любую помощь или руководство.

...