我有两个型号。首先,您可以创建产品名称并编写价格。第二个型号是包含这些产品的购物车。
现在我想创建一个表单,用户可以在购物车中提出产品成本。 例如,我创建了cart1,其中包含product1和product2。我希望有可能以购物车形式编辑这个价格。
我该怎么办?这是我的代码:
models.py
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.IntegerField(default='0')
def __unicode__(self):
return u"{}({})".format(self.name, self.price)
class Cart(models.Model):
product = models.ManyToManyField(Product)
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
forms.py
class CartForm(forms.ModelForm):
product = forms.ModelMultipleChoiceField(queryset = Product.objects.all(), widget=forms.CheckboxSelectMultiple(),required=True)
name = forms.CharField(max_length=45, label='nazwa')
price = forms.IntegerField(label='price')
class Meta:
model = Cart
fields = ('product', 'name', 'price')
这是照片我拥有的和我想要的(现在我有一个价格 - 对于所有产品,我想要一个产品的价格):
第二个问题:现在我有复选框,我该怎么办没有复选框或列表但是一切都必须自动选择(用户必须从这个购物车中选择所有产品)。
编辑: 现在我有了这个:
class CartForm(forms.ModelForm):
product = forms.ModelMultipleChoiceField(queryset = Product.objects.all(), widget=forms.CheckboxSelectMultiple(),required=True)
name = forms.CharField(max_length=45, label='nazwa')
price = forms.IntegerField(label='price')
class Meta:
model = Cart
fields = ('product', 'name', 'price')
IngredientFormSet = inlineformset_factory(Cart, Product)
views.py:
def cart_new(request):
if request.method == "POST":
form = CartForm(request.POST)
if form.is_valid():
cart = form.save(commit=False)
cart.save()
form.save_m2m()
ingredient_formset = IngredientFormSet(request.POST)
if ingredient_formset.is_valid():
ingredient = formset.save(commit=False)
ingredient_formset.save()
return redirect('shop.views.cart_detail', pk=cart.pk)
else:
form = CartForm()
return render(request, 'shop/cart_edit.html', {'form': form})
答案 0 :(得分:1)
您可以使用InlineFormSetView提供的Django Extra Views。以下是从doc:
复制的示例from extra_views import InlineFormSetView
class EditProductReviewsView(InlineFormSetView):
model = Product
inline_model = Review
...
答案 1 :(得分:0)
首先,您需要一个子模型(产品)的formset。然后在您的视图中,您应该同时访问:主模型的表单和子模型的formset并保存它。表格的一个例子:
from django import forms
from django.forms.models import inlineformset_factory
# ... import here your models
class CartForm(forms.ModelForm):
class Meta:
model = Cart
fields = ('product', 'name', 'price')
IngredientFormSet = inlineformset_factory(Cart, Product)
然后在您的视图中使用它。