Tôi có một trang có danh sách người dùng và muốn có thể nhấp vào liên kết để cập nhật tiểu sử của họ. Khi 'cập nhật' được nhấp, tôi sẽ có thể chỉnh sửa tên người dùng, tên, ... email, số điện thoại, bộ phận vv, trong một trang duy nhất, bằng cách sử dụng một nút gửi đơn. Tôi đã thực hiện điều này bằng cách sử dụng hai biểu mẫu, một cho Người dùng và một cho thông tin bổ sung. ListView, DeleteView và CreateView hoạt động hoàn hảo với hai dạng này, chứ không phải là UpdateView. Tôi không thể khởi tạo hai biểu mẫu với dữ liệu ban đầu.Chế độ xem dựa trên lớp Django - UpdateView với hai mẫu biểu mẫu - một gửi
Câu hỏi đặt ra là: làm cách nào để tạo nhanh hai biểu mẫu với dữ liệu? Ghi đè self.object? get_form_kwargs? Điều gì sẽ là giải pháp thanh lịch nhất?
Lớp UpdateView bên dưới. Tôi không tìm kiếm một giải pháp 'copy-paste', nhưng có thể hướng tôi đi đúng hướng.
Cảm ơn.
Paul
Số điện thoại, bộ phận được xác định trong mô hình có tên Nhân viên.
class Employee(models.Model):
user = models.OneToOneField(User)
phone_number = models.CharField(max_length=13, null=True)
department = models.CharField(max_length=100)
Mẫu là:
{% 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 %}
Lớp xem là:
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')