PROBLEM: Problem mam jest coraz cenę opcji w Selection modelu. Dzieje się tak dlatego, że w zależności od tego, które inne opcje będą znajdować się w tym samym koszyku, do wygenerowania sumy zostaną użyte różne ceny. Potrzebuję pomocy w zestawie zapytań, który dostarczy mi cenę opcji Opcja, jeśli opcja ma efektora efektorów, która sama znajduje się w tym samym wózku, z której korzysta, w przeciwnym razie użyje tylko zestawu pól opcji.Django: Sprawdzanie, czy obiekt istnieje w queryset (IF ELSE)
TempName App Model składa się z:
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
Istnieje wiele Sekcje na jednej stronie. Każdy może zawierać wiele opcji, które później będzie można wybrać przez użytkownika. Wybrana opcja Opcja trafi do koszyka, który zostanie użyty do wygenerowania całkowitej ceny.
ciągu Variation modelu, opcja pole po prostu mówi mi, który Opcja Variation należy. Jednak w koszyku będzie używane pole modelu w modelu Varaition.
Użytkownik będzie mógł wybrać dowolną liczbę Opcje, jednak w zależności od Opcje wybranego użytkownika, inne opcje mogą wyświetlać zmienności cenę gdzie wcześniej został wybrany effector_option.
Koszyk App Model składa się z:
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
Wózek może zawierać wiele Opcje które wybrał użytkownik. Każda z nich będzie miała właściwość ceny, która może być użyta do pokazania użytkownikowi ceny tego indywidualnego wyboru w zależności od tego, która inna opcja jest również w tym samym wózku.
co to próbowałem:
Get wszystkich odmian opcji. Następnie przeprowadź pętlę przez każdą zmianę i sprawdź, czy opcja Variation.effector_ jest zawarta w tym samym koszyku Cart. Jeśli tak, wyświetl tę cenę, w przeciwnym razie wyświetl cenę w wariancie, w której Variation.effector_option ma wartość null/not set.
Stwierdziłem, że ponad 26 zapytań było wywoływanych dla każdego Selection w koszyku. Czy ten schemat bazy danych wymaga więcej normalizacji lub czy jest wystarczająco dobry dla tego prostego projektu?
Przeczytaj o tym, jak zapytać (operatorzy zestawów zapytań), a nie zapętlić. – philipxy
@philipxy Tak, zrobiłem to, jednak mam problem z zapytaniem o zestaw zapytań, a następnie zapytanie o wynikowy zestaw zapytań. Znowu przeczytam tę część dokumentów, może coś przeoczyłem. –
Google 'stackoverflow.com django wynik zapytania innego zapytania'. – philipxy