Я хочу перейти к деталям продукта, но он отображает ]> и не показывает никакой информации Django ORM Python - PullRequest
0 голосов
/ 12 апреля 2020

Когда я нажимаю на предоставленную ссылку, она должна показывать товары, относящиеся к конкретному магазину, но я получаю ошибку. Неподдерживаемый поиск 'product_name' для CharField или присоединение к полю не разрешено.

Пожалуйста предложить для этого

product_name - это внешний ключ для ProductDetails, а shop - внешний ключ для Products

, это шаблон

<strong><a href="{{partone}}">{{tut.product_description}}</a></strong>

Views.py

    # first check to see if the url is in categories.

    categories = [c.shop_slug for c in Shop.objects.all()]
    if single_slug in categories:
        matching_series = Product.objects.filter(shop_name__shop_slug=single_slug)
        series_urls = {}

        for m in matching_series.all():
            part_one = Product.objects.filter(product_name=m.product_name)
            series_urls[m] = part_one

        return render(request=request,
                      template_name='products/shop_products.html',
                      context={"product_name": matching_series, "part_ones": series_urls})

    product_details = [t.test_something for t in ProductDetails.objects.all()]
    if single_slug in product_details:
        this_product = ProductDetails.objects.get(test_something = single_slug)

        return render(request, 'products/product_details.html',{"product":this_product})

    return HttpResponse(f"{single_slug} does not correspond")


from django.db import models

# Create your models here.

# For shop in the beginning


# class ShopType(models.Model):
#     shop_type = models.CharField(max_length=50)
#     shop_type_description = models.TextField()

#     def __str__(self):
#         return self.shop_type


class Shop(models.Model):
    shop_name = models.CharField(max_length=50)
    shop_location = models.CharField(max_length=100)
    shop_opening_time = models.CharField(max_length=10)
    shop_slug = models.CharField(max_length = 20)
    # shop_type = models.ForeignKey(
    #     ShopType, default=1, on_delete=models.SET_DEFAULT)
    shop_image = models.ImageField(upload_to='products', null=True, blank=True)
    shop_owner = models.CharField(max_length=100)
    shop_description = models.TextField()
    shop_added_date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.shop_name


class Product(models.Model):
    product_name = models.CharField(max_length=100)
    product_description = models.TextField()
    product_image = models.ImageField(
        upload_to='products', null=True, blank=True)
    product_price = models.DecimalField(max_digits=10, decimal_places=2)
    product_slug = models.CharField(max_length = 20)
    product_added_date = models.DateTimeField(auto_now=True)
    shop_name = models.ForeignKey(
        Shop, default=1, on_delete=models.SET_DEFAULT)

    def __str__(self):
        return self.product_name


class ProductDetails(models.Model):
    product_name = models.ForeignKey(
        Product, default=1, on_delete=models.SET_DEFAULT)
    test_something = models.CharField(max_length=20)

    def __str__(self):
        return self.test_something

Когда я нажимаю на магазин, он отображает сопутствующие товары. Теперь, когда я нажимаю на продукты, я хочу отобразить связанные с ними сведения о продукте.

Я также пытаюсь связать продукт с его деталями product_details = [t.test_something for t в ProductDetails.objects.all ( )] if single_slug в product_details: this_product = ProductDetails.objects.get (test_something = single_slug) вернуть визуализацию (запрос, 'products / product_details. html', {"product": this_product}) URL = {{tut .product_description}} но возвращает ничего не соответствует. и в URL показан набор запросов. Можете ли вы помочь в этом

1 Ответ

0 голосов
/ 12 апреля 2020

Я думаю, с точки зрения дизайна это не очень хорошо. Потому что он обрабатывает два сценария ios. Один для продуктов, а другой для деталей продукта. Сначала я бы предложил использовать два представления для этого или объединить две функции вместе. Вот пример того, как их объединить:

products = Product.objects.filter(Q(shop_name__shop_slug=single_slug)|Q(productdetails__test_something=singleslug))
return render(
    request=request,
    template_name='products/shop_products.html',
    context={"products": products, "slug":single_slug}
)

# template

{% for product in products %}
   <strong><a href="{{product.get_absolute_url}}">{{product.product_description}}</a></strong>
    {% for details in product.productdetails.all %}
         {{ details.text_something }}
    {% endfor %}
{% empty %}
   {{ slug }} not found
{% endfor %}

Я использую Q для выполнения сложных запросов. Также я получаю информацию о товаре от reverse relationship между Product и ProductDetails. Кроме того, эта реализация предлагает реализовать get_absolute_url в моделях.

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