我正在尝试制作一个购物车元素,其中显示产品信息的产品详细信息视图具有添加到购物车功能。我的想法是制作一个页面,其中包含特定对象的信息,但也允许该页面成为CreateView,该视图不显示输入信息的位置,但具有预设的对象信息,以创建更改其内容的产品的克隆。某个用户的变量。然后,该用户可以转到个人购物车,该购物车仅列出其用户名下的所有产品。
问题是,我无法将这两件事结合在一起,并且显然是基于缺乏能力(要么是dynamic_lookup_view提供信息,要么是CreateView提供一种形式,而不是两者都提供)。我尝试使用get_context_data和混合表的形式,甚至将函数放在类中。一些指导或正确路线上的明珠将不胜感激。
这是我的views.py
class ProductCreateView(CreateView):
template_name = '../templates/product/product_detail.html'
fields = [
'title',
'description',
'category',
'price',
'summary',
'image',
'user',
]
model = Product
def dynamic_lookup_view(request, id):
obj = get_object_or_404(Product, id=id)
context = {
'obj': obj,
}
return render(request, "product/product_detail.html", context)
这是我的urls.py
from django.conf import settings
from django.contrib import admin
from django.urls import path, include
from pages.views import home_view
from pages.views import contact_view
from pages.views import profile_view
from pages.views import our_staff_view
from pages.views import about_view
from pages.views import online_view
from pages.views import success_view
from products.views import product_detail_view
from products.views import dynamic_lookup_view
from pages.views import copyright_view
from django.conf.urls.static import static
urlpatterns = [
path('', home_view, name='home'),
path('contact/', contact_view, name='contact'),
path('online/', online_view, name='online'),
path('copyright/', copyright_view, name='copyright'),
path('admin/', admin.site.urls),
path('accounts/', include('accounts.urls')),
path('accounts/', include('django.contrib.auth.urls')),
path('profile/', profile_view, name='profile'),
path('staff/', our_staff_view, name='our_staff'),
path('about/', about_view, name="about"),
path('product/', product_detail_view),
path('product/<int:id>/', dynamic_lookup_view),
path('success/', success_view, name="success"),
]
答案 0 :(得分:0)
我知道了。与其尝试将创建视图与提供obj信息的函数结合起来,我只是将这两个常规函数组合在一起。我做了一个将模型形式放入网站的功能。利用表单中的信息,我只是创建了一个新对象inviews.py。产品详细视图只是添加一个对象变量。
def dynamic_lookup_view(request, id):
if request.method == 'POST':
form = ProductModelForm(request.POST, request.FILES or None)
if form.is_valid():
obj = Product() #gets new object
obj.title = form.cleaned_data['title']
obj.description = form.cleaned_data['description']
obj.category = form.cleaned_data['category']
obj.summary = form.cleaned_data['summary']
obj.image = form.cleaned_data['image']
obj.user = form.cleaned_data['user']
form.save()
else:
form = ProductModelForm()
obj = get_object_or_404(Product, id=id)
context = {
'obj': obj,
'form': form,
}
return render(request, "product/product_detail.html", context)