我仍然是python django的学习者。我正在尝试创建一个站点,用户可以在其中添加新产品,并且应该能够在另一页中看到最新添加的产品的详细信息。我能够实现第一部分,即“添加产品”页面。但是我需要有关如何正确获取详细信息页面的帮助。请求指导。
我的model.py如下:
from django.db import models
from django.db.models import CASCADE
from django.urls import reverse
from category.models import Subcategory, Category
from category.utils import unique_slugify
class Product(models.Model):
category = models.ForeignKey(Category, related_name='products', on_delete=CASCADE)
subcategory = models.ForeignKey(Subcategory, related_name='products', on_delete=CASCADE)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True, blank=True)
image = models.ImageField(upload_to='images/', blank=True)
description = models.TextField(blank=True)
price = models.IntegerField(default=0)
stock = models.PositiveIntegerField()
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('-created',)
index_together = (('id', 'slug'),)
def __str__(self):
return self.name
def save(self, **kwargs):
slug_str = "%s %s %s" % (self.name, self.category, self.subcategory)
unique_slugify(self, slug_str)
super(Product, self).save(**kwargs)
我的views.py如下所示:
from django.shortcuts import render, get_list_or_404
from django.urls import reverse_lazy
from django.views.generic import CreateView, UpdateView, ListView
from category.models import Subcategory
from product.forms import ProductForm
from product.models import Product
class ProductListView(ListView):
model = Product
context_object_name = 'product'
class ProductCreateView(CreateView):
model = Product
form_class = ProductForm
success_url = reverse_lazy('product_changelist')
def productlist(request):
prodlist = Product.objects.order_by('-pk')[0]
return render(request, 'product/product_list.html', {'prodlist': prodlist})
class ProductUpdateView(UpdateView):
model = Product
form_class = ProductForm
success_url = reverse_lazy('product_changelist')
def load_subcategory(request):
category_id = request.GET.get('category')
subcategory = Subcategory.objects.filter(category_id=category_id).order_by('name')
return render(request, 'product/subcategory_dropdown_list_options.html', {'subcategory': subcategory})
我的产品应用程序urls.py如下:
from django.urls import include, path
from . import views
urlpatterns = [
path('', views.ProductListView.as_view(), name='product_changelist'),
path('add/', views.ProductCreateView.as_view(), name='product_add'),
path('<int:pk>/', views.ProductUpdateView.as_view(), name='product_change'),
path('ajax/load-subcategory/', views.load_subcategory, name='ajax_load_subcategory'),
]
主要urls.py如下:
from django.contrib import admin
from django.urls import path, include
from category.views import CategoryListView
urlpatterns = [
path('admin/', admin.site.urls),
path('', CategoryListView.as_view(), name='home'),
path('category/', CategoryListView.as_view()),
path('category/', include('category.urls')),
path('product/', include('product.urls'), name='product'),
]
我创建了一个product_list.html,其中要显示最新添加的产品详细信息。
它只有以下代码:
{{ prodlist }}
当前添加新产品时,我可以在localhost:8000 / admin页面上看到该产品。 但是在单击添加按钮后,我看到一个空白页localhost:8000 / product
提前感谢所有帮助和指导
答案 0 :(得分:0)
如果页面完全空白,则可能意味着您的查询实际上未在视图中返回任何内容。您可以尝试从视图中打印产品清单,然后检查控制台以查看是否返回了任何内容。
更好的策略可能是为每个产品都有一个唯一的显示页面。
为所有产品提供一个页面,而不是获取所有产品并获取最新的产品。这样可以提供更大的灵活性,并让您轻松查看任何产品。
您为您的应用创建的新urls.py可能类似于
urlpatterns = [
path('<product_id>', views.ProductListView.as_view(), name='product_changelist'),
path('add/', views.ProductCreateView.as_view(), name='product_add'),
path('<int:pk>/', views.ProductUpdateView.as_view(), name='product_change'),
path('ajax/load-subcategory/', views.load_subcategory, name='ajax_load_subcategory'),
]
然后在您的views.py
def productlist(request, product_id):
product = Product.objects.get(productid=product_id)
return render(request, 'product/product_list.html', {'product': product})
然后终于在您的商店列表中:
{{product.name}}
很遗憾,如果没有更多信息,很难确定您的错误,希望对您有所帮助。