আমার এবং আমার দুজনেরই সমস্যা ছিল যে একজন কেবল একটি জেনেরিক শ্রেণিভিত্তিক দৃশ্যে একটি মডেলকে অন্তর্ভুক্ত করতে পারে। আমি মিয়াওর মতো এটির কাছে যাওয়ার একই ধরণের উপায় খুঁজে পেয়েছি তবে আরও মডুলার।
আমি একটি মিক্সিন লিখেছি যাতে আপনি সমস্ত জেনেরিক ক্লাস ভিত্তিক ভিউ ব্যবহার করতে পারেন। মডেল, ক্ষেত্রগুলি এবং এখন চাইল্ড-মডেল এবং চাইল্ড_ফিল্ড সংজ্ঞায়িত করুন - এবং তারপরে আপনি উভয় মডেলের ক্ষেত্রগুলি জ্যাচের বর্ণনা মতো একটি ট্যাগে মোড়ানো করতে পারেন।
class ChildModelFormMixin:
''' extends ModelFormMixin with the ability to include ChildModelForm '''
child_model = ""
child_fields = ()
child_form_class = None
def get_child_model(self):
return self.child_model
def get_child_fields(self):
return self.child_fields
def get_child_form(self):
if not self.child_form_class:
self.child_form_class = model_forms.modelform_factory(self.get_child_model(), fields=self.get_child_fields())
return self.child_form_class(**self.get_form_kwargs())
def get_context_data(self, **kwargs):
if 'child_form' not in kwargs:
kwargs['child_form'] = self.get_child_form()
return super().get_context_data(**kwargs)
def post(self, request, *args, **kwargs):
form = self.get_form()
child_form = self.get_child_form()
form_valid = form.is_valid()
child_form_valid = child_form.is_valid()
if form_valid and child_form_valid:
return self.form_valid(form, child_form)
else:
return self.form_invalid(form)
def form_valid(self, form, child_form):
self.object = form.save()
save_child_form = child_form.save(commit=False)
save_child_form.course_key = self.object
save_child_form.save()
return HttpResponseRedirect(self.get_success_url())
ব্যবহারের উদাহরণ:
class ConsumerRegistrationUpdateView(UpdateView):
model = Registration
fields = ('firstname', 'lastname',)
child_model = ConsumerProfile
child_fields = ('payment_token', 'cart',)
বা মডেলফর্মক্লাস সহ:
class ConsumerRegistrationUpdateView(UpdateView):
model = Registration
fields = ('firstname', 'lastname',)
child_model = ConsumerProfile
child_form_class = ConsumerProfileForm
সম্পন্ন. আশা করি যে কাউকে সাহায্য করবে