有没有一种方法可以组合将对象信息传递给url的函数和Django中的CreateView?

时间:2020-02-09 08:13:02

标签: python django django-forms django-views

我正在尝试制作一个购物车元素,其中显示产品信息的产品详细信息视图具有添加到购物车功能。我的想法是制作一个页面,其中包含特定对象的信息,但也允许该页面成为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"),
 ]

1 个答案:

答案 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)