2017-10-19 20 views
0

J'ai un modèle 'Partenaire' avec une relation un-à-plusieurs 'Produit'. Quand j'ai ajouté le formset 'Product' j'ai cassé quelque chose à faire avec les relations - le html apparaît toujours par exemple <h3>Products</h3>, et le bouton de soumission reste mais il n'y a plus aucune des boîtes de forme. On dirait que le formulaire est en train d'être chargé mais que quelque chose n'est peut-être plus passé. Toute aide serait grandement appréciée. Voici mon code ci-dessous.Mes champs de formulaire ne viennent plus sur la page de mise à jour?

mon 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> 
mon 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", 
     ] 
mon 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>") 

S'il vous plaît laissez-moi savoir s'il y a quelque chose que je peux fournir.

Répondre

1

Vos vues partner_create et partner_update affichent toutes les deux le modèle partner_form.html.

Cependant, vous n'incluez pas partnerForm ou formset dans le contexte de la vue partner_update. Au lieu de cela, vous incluez form, que vous n'utilisez nulle part dans le modèle.

+0

Encore merci Alasdair! – Chris