ПРОБЛЕМА: Проблема, которую я имею получает цену опциона в Выбор модели. Это связано с тем, что в зависимости от того, какие другие опции находятся в одной и той же тележке, для генерации общего количества будут использованы разные цены. Мне нужна помощь с набором запросов, который дает мне цену Опция, если у опции есть effector_option, которая сама по себе находится в той же тележке, которая используется, в противном случае используйте Вариант с только полем опций.Джанго: Проверка, существует ли объект в QuerySet (IF ELSE)
TempName App модель состоит из:
class Section(models.Model):
title = models.CharField(max_length=20)
description = models.CharField(max_length=100)
temp = models.ForeignKey(TempName, null=False)
def __str__(self):
return self.title
def get_options(self):
return self.option_set.all()
class Option(models.Model):
name = models.CharField(max_length=120)
section = models.ForeignKey(Section, null=False)
def __str__(self):
return self.name
def get_variations(self):
return self.variation_set.all()
class Variation(models.Model):
name = models.CharField(max_length=60, blank=True, unique=True)
price = models.DecimalField(max_digits=5, decimal_places=2)
option = models.ForeignKey(Option, null=False)
effector_option = models.ForeignKey(Option, null=True, blank=True, related_name='option_effected')
def __str__(self):
return self.name
Там может быть много Разделы на одной странице. Каждая Раздел может содержать множество Опции, которые впоследствии могут быть выбраны пользователем. Выбранный вариант пойдет в корзину, которая будет использоваться для создания общей цены.
В Вариация модели, опция поле просто говорит мне, какая опция Вариация принадлежит. Поле effector_option в пределах . Вариация модель, однако, будет использована тележкой.
Пользователю будет позволено выбрать любое количество Options, однако, в зависимости от параметров выбранного пользователя, другие параметры могут отображать Variation цены, где effector_option был ранее выбран.
Корзина App модель состоит из:
class Cart(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
creation_date = models.DateTimeField(verbose_name='creation date')
checked_out = models.BooleanField(default=False, verbose_name='checked out')
class Meta:
verbose_name = 'cart'
verbose_name_plural = 'carts'
ordering = ('-creation_date',)
def __str__(self):
return unicode(self.creation_date)
def get_selections(self):
return self.selection_set.all()
class Selection(models.Model):
cart = models.ForeignKey(Cart)
option = models.ForeignKey(Option)
@property
def price(self):
return 10
Тележка может содержать несколько Options, который выбрал пользователь. Каждый Выбор будет иметь ценовое свойство, которое может использоваться, чтобы показать пользователю цену этого индивидуального выбора в зависимости от того, какой другой Опция также в той же повозке.
, что я пытался:
Получить все варианты опции. Затем проведите каждую переменную и проверьте, содержится ли Variation.effector_option в той же Корзина. Если это отображает эту цену, в противном случае отобразите цену в пределах вариации, где Variation.effector_option будет null/не установлен.
Я обнаружил, что за каждую вызывают более 26 запросов в корзине. Нуждается ли в этой схеме db более нормализовать или это достаточно хорошо для этого простого проекта?
Читайте о том, как запросить (операторов набора запросов), а не в цикле. – philipxy
@philipxy Да, я сделал это. Однако проблема, с которой я сталкиваюсь, запрашивает запрос, затем запрашивает этот результат. Я еще раз прочитал эту часть документов, возможно, я что-то пропустил. –
Google 'stackoverflow.com django запрос результата другого запроса'. – philipxy