Есть ли способ объединить функцию, которая передает информацию об объекте в URL и CreateView в Django? - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь создать элемент корзины покупок, в котором в подробном представлении о товаре, отображающем информацию о товаре, есть функция добавления в корзину. Мой мыслительный процесс состоял в том, чтобы создать страницу, которая содержит информацию о конкретном c объекте, но также позволяет странице быть представлением CreateView, которое не отображает место для ввода информации, но имеет предварительно заданную информацию об объекте для создания клона объекта. продукт, изменяющий одну переменную для определенного пользователя. Затем этот пользователь может go перейти в личную корзину, где он просто перечисляет все продукты под своим именем пользователя.

Проблема в том, что я не могу объединить эти две вещи вместе, и это явно основано на недостатке способностей (это либо dynamic_lookup_view дает информацию, либо CreateView дает форму, а не обе). Я пытался использовать get_context_data и формы mixins, даже помещая функцию в классе. Некоторое руководство или жемчужина на правильном пути будет принята с благодарностью.

Вот мои 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 голосов
/ 09 февраля 2020

Я понял это. Вместо того, чтобы пытаться объединить представление создания с функцией, которая дает информацию 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...