Kullanıcılarımın bulunduğu bir sayfam var ve profillerini güncellemek için bir bağlantıya tıklayabilmek istiyorum. 'Güncelle' tıklandığında, tek bir sayfada, kullanıcı adı, ad, ... e-posta, telefon numarası, bölüm vb. Bunu, biri Kullanıcı için, diğeri ise ek bilgi olmak üzere iki form kullanarak gerçekleştirdim. ListView, DeleteView ve CreateView bu iki formla mükemmel çalışır, ancak UpdateView'ı değil. İki formu ilk verilerle başlatamıyorum.Django sınıf temelli görünümler - İki model formlu UpdateView - bir tane gönder
Sorun şu ki: iki formu nasıl verilerle eşleştirebilirim? Self.object dosyasının üzerine yazılsın mı? get_form_kwargs? En şık çözüm ne olurdu?
UpdateView sınıfı aşağıdadır. Bir 'kopyala-yapıştır' çözümü aramıyorum ama belki doğru yöne işaret et.
Teşekkürler.
Paul
telefon numarası, bölüm Çalışan adında bir model tanımlanmıştır.
class Employee(models.Model):
user = models.OneToOneField(User)
phone_number = models.CharField(max_length=13, null=True)
department = models.CharField(max_length=100)
şablon:
{% 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 %}
görünümü sınıftır:
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')