次のように、Company、Employee、およびExtモデルを持つDjangoアプリケーションを構築しています。
class Company(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=30)
...
class Employee(models.Model):
company = models.ForeignKey(Company)
emp_name = models.CharField(max_length=15)
...
class Ext(models.Model):
employee = models.ForeignKey(Employee)
expiry_date = models.DateField(default=lambda:datetime.datetime.now()+datetime.timedelta(days=60))
...
これらのモデルには次のフォームがあります。
class CompanyForm(ModelForm):
class Meta:
model = Company
class EmployeeForm(ModelForm):
class Meta:
model = Employee
exclude = ('company')
class ExtForm(ModelForm):
class Meta:
model = Prize
exclude = ('employee')
class EmployeeFormSet(BaseFormSet):
def clean(self):
if any(self.errors):
return
names = []
for i in range(0, self.total_form_count()):
form = self.forms[i]
e_name = form.cleaned_data['emp_name']
if e_name in names:
raise forms.ValidationErrors("Employees must have unique names")
names.append(e_name)
「Django Dynamic Formset」(http://code.google.com/p/django-dynamic-formset/) に出会いました。これは、複数の従業員フォームを従業員フォームセットに動的にテンプレートに追加できるようにすることに成功しました。 :
<script type="text/javascript" src="{% static "js/jquery-1.4.2.min.js" %}"></script>
<script type="text/javascript" src="{% static "js/jquery.formset.js" %}"></script>
<script type="text/javascript">
$(function() {
$('#eForm tbody tr').formset();
})
</script>
...
<form id="eForm" method="post" action="">
{% csrf_token %}
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
{% for form in employee_formset.forms %}
<tr>
<td>{{ form.emp_name }}</td></br>
...
</tr>
{% endfor %}
</tbody>
</table>
{{ employee_formset.management_form }}
<input id="submit" type="submit" name="submit" value="Submit" />
</form>
私の目標は、単一の会社、この会社に関連付けられた 1 人以上の従業員、およびこれらの従業員の 1 つだけに関連付けられた単一の Ext オブジェクトをすべて 1 回の送信で追加できるようにすることです。
これに対処する方法がわかりません。誰かが私を正しい方向に向けることができますか?