Какая модель django оптимизирована по производительности? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть три модели

class modelA(models.Model):
    name=models.CharField(max_length=100)
    image=models.ImageField(upload_to='modelsA',blank=True)
    #some other fields

class modelB(models.Model):
    name=models.CharField(max_length=100)
    image=models.ImageField(upload_to='modelsB',blank=True)
    #some other fields

class modelC(models.Model):
    name=models.CharField(max_length=100)
    image=models.ImageField(upload_to='modelsC',blank=True)
    #some other fields

Я пытаюсь создать модель, которая содержит предпочтительные экземпляры моделей modelA, modelB и modelC. Существует два подхода к решению этой проблемы.

Подход A Я могу создать новую модель D, которую можно инициализировать значениями полей из моделей выше

class modelD(models.Model):
  user=models.ForeignKey(User,on_delete=models.CASCADE)
  name=models.CharField(max_length=100)
  image=models.ImageField(upload_to='shortcuts',blank=True)
  decider=models.IntegerField(default='0')
  #0=>shortcut from modelA
  #1=>shortcut from modelB
  #2=>shortcut from modelC

Подход B Второй подход заключается в том, чтобы удерживать ярлыки в отдельной модели ярлыков и во время выборки сериализовать их после извлечения в единый список.

class ShortcutA(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE)
    shortcut=models.ForeignKey(modelA,on_delete=models.CASCADE)


class ShortcutB(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE)
    shortcut=models.ForeignKey(modelB,on_delete=models.CASCADE)

class ShortcutC(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE)
    shortcut=models.ForeignKey(modelC,on_delete=models.CASCADE)

Я не могу решить, какой подход будет более быстрым. Подход A приводит к дополнительным полям, в то время как для подхода B мне нужно сериализовать их после выборки перед отправкой. Какой подход более оптимизирован. Было бы здорово, если кто-нибудь может объяснить, почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...