def test_find_products_find_a_product(self): product_manager = ProductManager() products, product = product_manager.find_products("nutella-ferrero") self.assertEqual(len(products), 1) self.assertEqual(products[0], self.product_b) self.assertEqual(product, self.product_a)
def save(request): """Save the product into favorite.""" if request.method == "POST": data = request.POST ProductManager.save_product(request, data) favs = ProductManager.get_fav(request) return render(request, "pages/myfood.html", {"favorites": favs}) else: raise Http404
def detail(request): """Display detail of a selected product.""" if request.method == "POST": data = request.POST product_detail = ProductManager.get_detail(data) return render(request, "pages/detail.html", {"product": product_detail}) else: raise Http404
def save(request): """Save the product into favorite.""" if request.method == "POST": data = request.POST if not request.user.is_authenticated: cart = FavoriteCart(request) cart.add({ "product": data["product-searched-id"], "substitute": data["substitute-searched-id"], "user": "******", }) return redirect_to_login(request, "pages/myfood.html", login_url="/accounts/login/") ProductManager.save_product(request, data) favs = ProductManager.get_fav(request) return render(request, "pages/myfood.html", {"favorites": favs}) else: raise Http404
class Product(TimeStamp): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=150) price = models.FloatField(default=1) description_short = models.CharField(max_length=200, null=True, blank=True) description_long = models.TextField(null=True, blank=True) active = models.BooleanField(default=False) shop = models.CharField(max_length=100, blank=True, null=True) objects = ProductManager() def __str__(self): return self.name
def test_search_from_user_input(self): data = {"product": "Indisches Sabji"} ( substitute, selected_product, ) = ProductManager.search_from_user_input(data) self.assertEqual( substitute[0]["product_name"], self.data["sabji"][1]["product_name_fr"], ) self.assertEqual( selected_product[0]["product_name"], self.data["sabji"][0]["product_name_fr"], )
class Products(models.Model): """ we class the model for each products""" id_code = models.BigIntegerField(primary_key=True) food_name = models.CharField(max_length=255) nutrition_grade = models.CharField(max_length=1) image_nutrition_url = models.URLField(max_length=255) image_url = models.URLField(max_length=255) food_link = models.URLField(max_length=255) category = models.ManyToManyField("Category", related_name="products") def __str__(self): return self.food_name objects = ProductManager()
def sub_list(request): """Display the list of substitute for one selected product.""" if request.method == "POST": form = SearchForm(request.POST) if form.is_valid(): ( substitute, selected_product, ) = ProductManager.search_from_user_input(form.cleaned_data) return render( request, "products/sub_list.html", {"product": substitute, "searched": selected_product}, ) else: print("form is not valid !") raise Http404 else: form = SearchForm() return render(request, "products/sub_list.html", {"form": form})
class Product(ShortUUIDBase, TimestampBase, StatusBase): """ Cart model Extends: ShortUUIDBase TimestampBase StatusBase """ category = models.CharField(max_length=2, choices=CATEGORIES.CHOICES) price = models.DecimalField(max_digits=15, decimal_places=8, default=D(0)) title = models.CharField(max_length=255) imageUrl = models.CharField(max_length=2048) objects = ProductManager() class Meta: verbose_name = 'Cart' verbose_name_plural = 'usersCarts' def __unicode__(self): """Unicode description.""" return '%s %s' % (self.id, self.title)
class Product(models.Model): title = models.CharField(max_length=120) brand = models.CharField(max_length=100, blank=True) slug = models.SlugField(blank=True, unique=True) type = models.CharField(max_length=50, choices=PRODUCT_TYPES) gender = models.CharField(max_length=50, choices=GENDER_CHOICES, blank=True) description = RichTextField() rating = models.DecimalField(decimal_places=1, max_digits=5, default=0.0, validators=[ MaxValueValidator(limit_value=5.0), MinValueValidator(limit_value=0.0) ]) price = models.DecimalField(decimal_places=2, max_digits=20, default=100.00) properties = ChainedManyToManyField(Property, related_name='products', blank=True, chained_field="type", chained_model_field="attr__type", horizontal=True) image = models.ImageField(upload_to=upload_image_path, null=True, blank=True) attributes = ChainedManyToManyField( ProductAttribute, related_name='products', blank=True, chained_field="type", chained_model_field="attr__type", horizontal=True, ) featured = models.BooleanField(default=False) active = models.BooleanField(default=True) timestamp = models.DateTimeField(auto_now_add=True) tags = models.ManyToManyField(Tag, related_name='products', blank=True) objects = ProductManager() # def get_absolute_url(self): # return reverse("categories:" + str(self.type) + "_detail", kwargs={"slug": self.slug}) def __str__(self): return self.title def __unicode__(self): return self.title def url(self): return "/products/" + str(self.type) + "/" + str(self.slug) + "/" def product_properties(self): product_properties = ", ".join( [prop.attr.name for prop in self.properties.all()]) if product_properties == "": return "-------" else: return product_properties def product_attributes(self): product_attrs = ", ".join( [attribute.attr.name for attribute in self.attributes.all()]) if product_attrs == "": return "-------" else: return product_attrs def calculate_rating(self): rating = self.reviews.all().aggregate( Avg('rating'))['rating__avg'] or 0.0 return rating @property def name(self): return self.title
def fav(request): """Display favorites saved by user.""" favs = ProductManager.get_fav(request) return render(request, "pages/myfood.html", {"favorites": favs})
def test_find_product_find_no_product(self): product_manager = ProductManager() products, product = product_manager.find_products("gonuts-dailylife") self.assertEqual(len(products), 0) self.assertEqual(product, self.product_b)