Django Ошибка типа при доступе к ссылке с помощью get_absolute_url () - PullRequest
0 голосов
/ 09 марта 2020

Добрый день.

Итак, я прохожу Django 2 по примеру , и я обнаружил странную ошибку при посещении объекта из списка объектов.

TypeError at / 1 / black-tea /

product_detail () получил неожиданный аргумент ключевого слова 'id'

Тип, который он получает, является правильным, поэтому небольшая помощь будет оценен.

код от views.py

def product_detail(request, product_id, slug):
    product = get_object_or_404(Product, slug=slug,
                                id=product_id, available=True)
    return render(request, 'shop/product/detail.html',
                  {'product': product})

models.py

class Product(models.Model):
    category = models.ForeignKey(Category,
                                 related_name='products',
                                 on_delete=models.CASCADE)
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200, db_index=True)
    image = models.ImageField(upload_to='products/%Y/%m/%d',
                              blank=True)
    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    available = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ('name',)
        index_together = (('id', 'slug'))

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('shop:product_detail',
                       args=[self.id, self.slug])

urls.py

path('<int:id>/<slug:slug>/', product_detail, name='product_detail'),

Код из шаблона

<div id="main" class="product-list">
        <h1>{% if category %} {{ category.name }}{% else %}Products{% endif %}</h1>
        {% for product in products %}
            <div class="item">
                <a href="{{ product.get_absolute_url }}">
                    <img src="{% if product.image %}{{ product.image.url }}
                    {% else %}{% static 'img/images.jpeg' %}{% endif %}">
                </a>
                <a href="{{ product.get_absolute_url }}">{{ product.name }}</a>
                <br>
                ${{ product.price }}
            </div>
        {% endfor %}
    </div>

1 Ответ

1 голос
/ 09 марта 2020

product_detail аргументы должны соответствовать вашим параметрам отображения URL в urls.py. Определение функции должно иметь аргументы id, slug:

def product_detail(request, id, slug):
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...