Как я могу получить доступ к форме (в шаблоне), которая определена в другом приложении (представлениях) в Django
Новичок в Django. Поэтому, пожалуйста, помогите мне. Моя цель состоит в том, что я хочу получить доступ к форме из другого приложения (cart) в мое текущее приложение (shoppApp).
views.py(cart application):
from django.shortcuts import render, redirect, get_object_or_404
from django.views.decorators.http import require_POST
from shoppApp.models import Product
from .cart import Cart
from .forms import CartAddProductForm
@require_POST
def cart_add(request, product_id):
cart = Cart(request)
product = get_object_or_404(Product, id=product_id)
form = CartAddProductForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
cart.add(product=product,quantity=cd['quantity'],update_quantity=cd['update'])
return redirect('cart:cart_detail')
def cart_remove(request, product_id):
cart = Cart(request)
product = get_object_or_404(Product, id=product_id)
cart.remove(product)
return redirect('cart:cart_detail')
def cart_detail(request):
cart = Cart(request)
for item in cart:
item['update_quantity_form'] = CartAddProductForm(initial={'quantity': item['quantity'],'update': True})
return render(request, 'cart/detail.html', {'cart': cart})
def product_detail(request, id, slug):
product = get_object_or_404(Product, id=id,slug=slug,available=True)
cart_product_form = CartAddProductForm()
return render(request,'shop/product/detail.html',{'product': product,'cart_product_form': cart_product_form})
forms.py(cart application)
from django import forms
PRODUCT_QUANTITY_CHOICES = [(i, str(i)) for i in range(1, 21)]
class CartAddProductForm(forms.Form):
quantity = forms.TypedChoiceField(choices=PRODUCT_QUANTITY_CHOICES,coerce=int)
update = forms.BooleanField(required=False,initial=False,widget=forms.HiddenInput)
details.html(приложение shoppApp)
{% extends "shop/base.html" %}
{% load static %}
{% block title %}
{{ product.name }}
{% endblock %}
{% block content %}
<div class="product-detail">
<img src="{% if product.image %}{{ product.image.url }}{% else %}{% static 'img/no_img.jpg' %}{% endif %}">
<h1>{{ product.name }}</h1>
<h2><a href="{{ product.category.get_absolute_url }}">{{product.category }}</a></h2>
<p class="price">${{ product.price }}</p>
<form action="{% url 'cart:cart_add' product.id %}" method="post">
{% csrf_token %}
{{ cart_product_form }}
<input type="submit" value="Add to cart">
</form>
{{ product.description|linebreaks }}
</div>
{% endblock %}
views.py(приложение shoppApp)
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render, get_object_or_404
from .models import Category, Product
from cart.cart import Cart
from cart.forms import CartAddProductForm
def product_list(request, category_slug=None):
category = None
categories = Category.objects.all()
products = Product.objects.filter(available=True)
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category=category)
return render(request,'shop/product/list.html',{'category': category,'categories': categories,'products': products})
def product_detail(request, id, slug):
product = get_object_or_404(Product,id=id,slug=slug,available=True)
return render(request,'shop/product/detail.html',{'product': product})
структура проекта:
Пожалуйста, поправьте меня, если мой способ неправильный.
Заранее спасибо.
Просто вы можете импортировать форму из корзины в приложение для покупок, сделав следующее:
from cart.forms import formname
EX: from cart.forms import UserForm
Добавьте приведенный выше код в приложение для покупок.
Это решит вашу проблему.