2017-10-09 4 views
0

Voici l'erreur: Toute aide à undestanding ce qui se passe et comment y remédier serait très appréciéJe reçois l'erreur suivante lorsque vous essayez d'enregistrer cette forme

Cannot assign '<PartnerForm bound=True, valid=True, fields=(name;logo;banner_image;mission;vision;website_link;fb_link;twitter_link;ig_link)>': "Product.partner" must be a "Partner" instance. 

Je suis en train d'ajouter un à de nombreuses relations entre deux modèles. Le modèle «un» est un «partenaire». Le 'beaucoup' sont 'produits' qui contient la description de l'image, le prix, etc.

Voici mon views.py

def partner_create(request): 

#Trying to add multiple product functionality 
    if not request.user.is_staff or not request.user.is_superuser: 
     raise Http404 

    ProductFormSet = inlineformset_factory(Partner, Product, form=ProductForm, extra=3) 

    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(): 

      instance = partnerForm.save(commit=False) 
      instance.save() 


      for form in formset.cleaned_data: 
       image = form['image'] 
       product = Product(partner=partnerForm, image=image) 
       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}) 

voici mon admin.py

class ProductImageInline(admin.TabularInline): 
    model = Product 
    extra = 3 

#This works originally but doesn't do multiple products 
class PartnerModelAdmin(admin.ModelAdmin): 
    list_display = ["__unicode__", "timestamp"] 
    inlines = [ProductImageInline,] 
    class Meta: 
     model = Partner 

admin.site.register(Partner, PartnerModelAdmin) 

Voici mon form.py

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", 
      "fb_link", 
      "twitter_link", 
      "ig_link", 
     ] 

class ProductForm(forms.ModelForm): 
    image = forms.ImageField(label='Image') 
    class Meta: 
     model = Product 
     fields = [ 
      "partner", 
      "image", 
      "description", 
      "price" 
     ] 

Répondre

3

L'erreur est assez évidente. Dans les lignes

product = Product(partner=partnerForm, image=image) 
product.save() 

vous affectez un PartnerForm à votre produit alors qu'il attend une instance de partenaire! Changez-le en

product = Product(partner=instance, image=image) 
product.save() 

(instance est une instance de partenaire de ce que je vois ci-dessus) et cela fonctionnera.