Наиболее эффективный способ хранения динамических свойств в Django [дубликат]

Представим, что у нас есть такая база:

class MyModel(models.Model):
    name = models.CharField(max_lenght=25)
    # ... some other fields

    dynamic_properties = models.ManyToManyField("Dynamic")

class Dynamic(models.Model):
    key = models.CharField(max_lenght=25)
    value = models.CharField(max_lenght=25)

MyModel будет основой всех моих записей, содержащих базовые статические данные, но когда мне нужно добавить динамическое свойство, я добавляю его в поле dynamic_properties.

Хотя на бумаге это имеет смысл, на практике это неэффективно. Допустим, каждая запись MyModel имеет в среднем 4 динамических свойства, если я хочу просмотреть 2k объектов MyModel и вернуть все их динамические свойства, это будет довольно медленно.

Я попытался использовать prefetch_related, как советует документация, но, похоже, это не оказало реального влияния (но, возможно, я неправильно понимаю, как это используется).

Для справки я попробовал так:

{model.name: model.some_value for model in MyModel.objects.all()} # Is very slow
{model.name: model.some_value for model in MyModel.objects.prefetch_related("dynamic_properties")} # Is also very slow

Есть ли более эффективный способ иметь динамические свойства или мое понимание prefetch_related неверно и это хороший способ?

Вернуться на верх