我有一个模特&#39;合作伙伴&#39;与“产品”的一对多关系。当我添加&#39;产品&#39; formset我打破了与关系有关的事情 - html仍显示例如<h3>Products</h3>
,并且提交按钮仍然存在,但不再有任何表格框。因此看起来表单正在加载,但有些东西可能不会被传递。任何帮助将不胜感激。以下是我的代码。
<div class="container">
<div class='col-sm-6'>
<h1>Preview</h1>
<hr/>
<div class='content-preview'>
<h3 id='preview-name'></h3>
<p id='preview-mission'></p>
<p id='preview-vision'></p>
<p id='preview-website-link'></p>
<p id='preview-fb-link'></p>
<p id='preview-twitter-link'></p>
<p id='preview-ig-link'></p>
</div>
</div>
<div class='col-sm-6'>
<h1>Form</h1>
<hr/>
<form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}
{{ partnerForm|crispy }}
{{ formset.management_form }}
<br>
<h3>Products</h3>
{% for form in formset %}
{{ form|crispy }}
{% endfor %}
<input type='submit' class='btn btn-default' value='Create Partner' />
</form>
</div>
</div>
我的form.html
class PartnerForm(forms.ModelForm):
mission = forms.CharField(widget=PagedownWidget(show_preview=False))
vision = forms.CharField(widget=PagedownWidget(show_preview=False))
# publish = forms.DateField(widget=forms.SelectDateWidget)
class Meta:
model = Partner
fields = [
"name",
"logo",
"banner_image",
"mission",
"vision",
"website_link",
"store_link",
"fb_link",
"twitter_link",
"ig_link",
]
class ProductForm(forms.ModelForm):
image = forms.ImageField(label='Image')
class Meta:
model = Product
fields = [
"name",
"link",
"description",
"price",
"image",
]
我的views.py
from django.contrib import messages
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, get_object_or_404, redirect
##
from django.forms import modelformset_factory
from django.template import RequestContext
# Create your views here.
from .forms import PartnerForm, ProductForm
from .models import Partner, Product
from django.forms import inlineformset_factory
def partner_create(request):
if not request.user.is_staff or not request.user.is_superuser:
raise Http404
ProductFormSet = modelformset_factory(Product, form=ProductForm, extra=2, min_num=1)
if request.method == 'POST':
partnerForm = PartnerForm(request.POST or None, request.FILES or None)
formset = ProductFormSet(request.POST, request.FILES, queryset=Product.objects.none())
if partnerForm.is_valid() and formset.is_valid():
print(formset.cleaned_data)
instance = partnerForm.save(commit=False)
instance.save()
products = formset.save(commit=False)
for product in products:
product.partner = instance
product.save()
messages.success(request, "Partner Successfully Created")
else:
print partnerForm.errors, formset.errors
else:
partnerForm = PartnerForm()
formset = ProductFormSet(queryset=Product.objects.none())
return render(request, "partner_form.html", {"partnerForm": partnerForm, "formset": formset})
def partner_detail(request, slug=None):
instance = get_object_or_404(Partner, slug=slug)
context = {
"name": instance.name,
"instance": instance
}
return render(request, "partner_detail.html", context)
def partner_list(request):
queryset = Partner.objects.all()
context = {
"partner_list": queryset,
"name": "List"
}
return render(request, "partner_list.html", context)
def partner_update(request, slug=None):
if not request.user.is_staff or not request.user.is_superuser:
raise Http404
instance = get_object_or_404(Partner, slug=slug)
partnerForm = PartnerForm(request.POST or None, request.FILES or None, instance=instance)
if partnerForm.is_valid():
instance = form.save(commit=False)
instance.save()
messages.success(request, "Partner Saved")
return HttpResponseRedirect(instance.get_absolute_url())
context = {
"name": instance.name,
"instance": instance,
"form": partnerForm
}
return render(request, "partner_form.html", context)
return HttpResponse("<h1>Update</h1>")
如果我还能提供其他任何内容,请告诉我。
答案 0 :(得分:1)
您的partner_create
和partner_update
观看次数都会呈现partner_form.html
模板。
但是,partnerForm
视图中的上下文中未包含formset
或partner_update
。而是包含form
,您不在模板中的任何位置使用。