Я не могу получить доступ к деталям моего приложения "Продукты" - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть два приложения в моем проекте Django: products и blog.Все остальное работает правильно, но в моем списке продуктов: /products/, где находятся названия продуктов, когда я нажимаю на название, я остаюсь на той же странице: /products.Но когда я иду прямо к products/1 или products/2, это работает.

product_list.html:

{% extends 'base.html' %}

{% block content %}

{% for instance in object_list %}
<p>{{ instance.id }} -  <a href="{{ instance.get_absolute_url }}"> {{ 
instance.title }}</a> </p>

{% endfor %}
{% endblock  %}      

models.py:

from django.db import models
from django.urls import reverse

class Product(models.Model) :
    title       = models.CharField(max_length=130)
    description = models.TextField(blank=True,null=True)
    price       = models.DecimalField(max_digits=5,decimal_places=2)
    summary     = models.TextField()
    Featured    = models.BooleanField(default=False)


    def get_absolute_url(self,id):
       return  reverse("products : product_detail",kwargs={"id":self.id})

URL:

from django.contrib import admin
from django.urls import path

from products.views import (
  product_detail_view ,
  product_create_view ,
  product_delete_view ,
  product_list_view ,
  product_update_view ,
)
app_name = 'products'

urlpatterns = [


path('<int:id>/', product_detail_view, name='product_detail'),
path('create/', product_create_view, name='product_create'),
path('<int:id>/delete/', product_delete_view, name='product_delete'),
path('', product_list_view, name='product_list'),
path('<int:id>/update/', product_update_view, name='product_update'),


]

просмотров:

from django.shortcuts import render, get_object_or_404 , redirect
from .models import Product
from .forms import ProductForm

def product_detail_view(request,id):
     obj=get_object_or_404(Product,id=id)
     context = {
        'object' : obj
    }
    return render( request , "products/product_detail.html" , context )

def product_create_view(request):
    form=ProductForm(request.POST or None)
    if form.is_valid():
        form.save()
        form = ProductForm()
    context = {
        'form' : form
    }
        return render( request , "products/product_create.html" , context )


def product_delete_view(request,id) :
    obj=get_object_or_404(Product,id=id)
    if request.method == "POST":
        obj.delete()
        return redirect("../../")
    context = {
        'object': obj

    }
    return render( request , "products/product_delete.html" , context )

def product_list_view(request):
    queryset = Product.objects.all()   #list of objects
    context = {
    'object_list' : queryset
    }
     return render( request , "products/product_list.html" , context )

def product_update_view(request,id=id):
    obj=get_object_or_404(Product,id=id)
    form = ProductForm(request.POST or None,instance=obj)
    if form.is_valid():
        form.save()
    context = {
        'form': form
    }
    return render(request, "products/product_create.html", context)

Любая помощь?

1 Ответ

0 голосов
/ 18 февраля 2019

После удаления id параметра для функции get_absolute_url() в соответствии с @ shekhar

В строке

return reverse("products : product_detail",kwargs={"id":self.id})

попробуйте удалить пространство передproduct_detail.Космический инфронт product_detail заставляет его принимать char инфронт char p и делает его другим значением в целом, принимая параметр для функции reverse.

def get_absolute_url(self):
       return  reverse("products:product_detail",kwargs={"id":self.id})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...