У меня есть три модели
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 мне нужно сериализовать их после выборки перед отправкой. Какой подход более оптимизирован. Было бы здорово, если кто-нибудь может объяснить, почему?