Наиболее эффективный способ хранения динамических свойств в 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
неверно и это хороший способ?