我的表单字段不再出现在更新页面上?

时间:2017-10-19 15:51:13

标签: django django-forms django-views

我有一个模特&#39;合作伙伴&#39;与“产品”的一对多关系。当我添加&#39;产品&#39; formset我打破了与关系有关的事情 - html仍显示例如<h3>Products</h3>,并且提交按钮仍然存在,但不再有任何表格框。因此看起来表单正在加载,但有些东西可能不会被传递。任何帮助将不胜感激。以下是我的代码。

我的forms.py
<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>")

如果我还能提供其他任何内容,请告诉我。

1 个答案:

答案 0 :(得分:1)

您的partner_createpartner_update观看次数都会呈现partner_form.html模板。

但是,partnerForm视图中的上下文中未包含formsetpartner_update。而是包含form,您不在模板中的任何位置使用。

相关问题