/ / Django इनलाइनफ़ॉर्मसेट कारणों के साथ वैधता जोड़ना, संघर्ष - अजगर, django, विरासत, django- रूप

Django इनलाइनफ़ॉर्मसेट के कारण वैधता जोड़ना

मैं अपने Django रूपों में सत्यापन जोड़ने की कोशिश कर रहा हूं।

मैं अपने इनलाइनफॉर्मसेट के लिए कम से कम एक चाइल्ड मॉडल की आवश्यकता चाहता हूं।

मैं एक संदर्भ के रूप में निम्नलिखित का उपयोग कर रहा हूं: Django में इनलाइन फॉर्म वैलिडेशन

मुझे अभी भी एक त्रुटि मिल रही है

लाइन 454, formet_factory में वापसी प्रकार (फ़ॉर्म)नाम + str ("फ़ॉर्मसेट"), (फॉर्मसेट,), अटार्स अपने सभी ठिकानों के मेटाक्लासेस का एक (गैर-सख्त) उपवर्ग हो

from django.forms import inlineformset_factory
from .models import *
from django.forms.models import BaseInlineFormSet
from django import forms
class PropertyForm(forms.ModelForm):
class Meta:
model = Property
exclude = ()


class UnitForm(forms.ModelForm):
class Meta:
model = Unit
exclude = ()

class CustomUnitFormset(BaseInlineFormSet):
def is_valid(self):
return super(CustomUnitFormset, self).is_valid() and 
not any([bool(e) for e in self.errors])

def clean(self):
# get forms that actually have valid data
count = 0
for form in self.forms:
try:
if form.cleaned_data and not form.cleaned_data.get("DELETE", False):
count += 1
except AttributeError:
pass
if count < 1:
raise forms.ValidationError("You must have at least one unit")

UnitFormSet = inlineformset_factory(Property, Unit, form=PropertyForm,
formset="CustomUnitFormset",
extra=0,
min_num=1,
validate_min=True,
validate_max=True,
max_num=10,
)

view.py

 class PropertyUnitCreate(LoginRequiredMixin, CreateView):
model = Property
fields = ["address"]
success_url = reverse_lazy("property-list")

def get_context_data(self, **kwargs):
data = super(PropertyUnitCreate, self).get_context_data(**kwargs)
if self.request.POST:
data["units"] = UnitFormSet(self.request.POST)
else:
data["units"] = UnitFormSet()
return data

def form_valid(self, form):
context = self.get_context_data()
units = context["units"]
form.instance.user = self.request.user
with transaction.atomic():
self.object = form.save()
if units.is_valid():
units.instance = self.object
units.save()


return super(PropertyUnitCreate, self).form_valid(form)

मैंने यहां बताई गई विरासत के मुद्दों को समझने की कोशिश की है:ट्रिपल वंशानुक्रम मेटाक्लास संघर्ष का कारण बनता है ... कभी-कभी

मेरा विचार तर्क से आता है https://medium.com/@adandan01/django-inline-formsets-example-mybook-420cc4b6225d

लेकिन मुझे नहीं लगता कि जहाँ मुझे विरासत में मिली क्लास हैदो वर्गों से जो इस त्रुटि का कारण बनेंगे। सब कुछ ठीक काम करता है अगर मैं "formet =" CustomUnitFormset "को हटा दूं, "

क्या कोई त्रुटि का कारण बता सकता है और मैं इसे कैसे रोक सकता हूं? क्या मैं अपने प्रपत्रों को बेहतर तरीके से दर्ज करूंगा?

उत्तर:

जवाब के लिए 0 № 1

आपको फैक्ट्री में वास्तविक फॉर्मेट क्लास को पास करने की आवश्यकता है, न कि एक स्ट्रिंग को।

UnitFormSet = inlineformset_factory(Property, Unit, form=PropertyForm,
formset=CustomUnitFormset, ...)