मेरे पास उपयोगकर्ताओं की एक सूची वाला एक पृष्ठ है, और वे अपनी प्रोफ़ाइल को अपडेट करने के लिए एक लिंक पर क्लिक करने में सक्षम होना चाहते हैं। जब 'अपडेट' पर क्लिक किया जाता है, तो मुझे एकल सबमिट बटन का उपयोग करके, एक ही पृष्ठ में उपयोगकर्ता नाम, पहला नाम, ... ईमेल, फोन नंबर, विभाग इत्यादि को संपादित करने में सक्षम होना चाहिए। मैंने इसे दो रूपों का उपयोग करके, उपयोगकर्ता के लिए एक और अतिरिक्त जानकारी के लिए पूरा किया। ListView, DeleteView और CreateView इन दो रूपों के साथ पूरी तरह से काम करते हैं, लेकिन UpdateView नहीं। मैं प्रारंभिक डेटा के साथ दो रूपों को तुरंत चालू करने में सक्षम नहीं हूं।Django क्लास आधारित विचार - दो मॉडल रूपों के साथ अद्यतन दृश्य - एक सबमिट
सवाल यह है कि मैं डेटा के साथ दो रूपों को कैसे चालू करूं? Self.object ओवरराइट करें? get_form_kwargs? सबसे सुरुचिपूर्ण समाधान क्या होगा?
अद्यतन दृश्य वर्ग नीचे है। मैं 'कॉपी-पेस्ट' समाधान की तलाश नहीं कर रहा हूं, लेकिन शायद मुझे सही दिशा में इंगित करें।
धन्यवाद।
पॉल
फोन नंबर, विभाग कर्मचारी नाम के एक मॉडल में परिभाषित किया गया है।
class Employee(models.Model):
user = models.OneToOneField(User)
phone_number = models.CharField(max_length=13, null=True)
department = models.CharField(max_length=100)
टेम्पलेट है:
{% extends "baseadmin.html" %}
{% load crispy_forms_tags %}
{% block content %}
<h4>Edit a user</h4>
<form action="" method="post" class="form-horizontal">
<legend>Edit a user</legend>
{% crispy form %}
{% crispy form2 %}
<div class="form-actions">
<input type="submit" class="btn btn-primary" value="Save">
<a href="{% url 'client_list' %}" class="btn">Cancel</a>
</div>
</form>
{% endblock content %}
दृश्य वर्ग है:
class ClientUpdateView(UpdateView):
model = User
form_class = ClientsUserForm
second_form_class = ClientsForm
template_name = 'admin/client_update.html'
def get_context_data(self, **kwargs):
context = super(ClientUpdateView, self).get_context_data(**kwargs)
context['active_client'] = True
if 'form' not in context:
context['form'] = self.form_class(self.request.GET)
if 'form2' not in context:
context['form2'] = self.second_form_class(self.request.GET)
context['active_client'] = True
return context
def get(self, request, *args, **kwargs):
super(ClientUpdateView, self).get(request, *args, **kwargs)
form = self.form_class
form2 = self.second_form_class
return self.render_to_response(self.get_context_data(
object=self.object, form=form, form2=form2))
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.form_class(request.POST)
form2 = self.second_form_class(request.POST)
if form.is_valid() and form2.is_valid():
userdata = form.save(commit=False)
# used to set the password, but no longer necesarry
userdata.save()
employeedata = form2.save(commit=False)
employeedata.user = userdata
employeedata.save()
messages.success(self.request, 'Settings saved successfully')
return HttpResponseRedirect(self.get_success_url())
else:
return self.render_to_response(
self.get_context_data(form=form, form2=form2))
def get_success_url(self):
return reverse('client_list')