gpt4 book ai didi

python - Django 表单集困难

转载 作者:太空宇宙 更新时间:2023-11-03 19:18:22 24 4
gpt4 key购买 nike

我正在构建一个 Django 应用程序,其中包含 Company、Employee 和 Ext 模型:

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>

我的目标是能够添加一家公司、与该公司关联的一名或多名员工以及与其中一名员工关联的单个 Ext 对象,所有这些都在一次提交中完成。

我不知道如何解决这个问题。谁能指出我正确的方向?

最佳答案

如果您的 ExtModel() 不需要任何用户输入,则:

表单.py

class CompanyForm(ModelForm):
class Meta:
model = Company

class EmployeeForm(ModelForm):

ext = forms.BooleanField(initial=False)

class Meta:
model = Employee

然后,在您的 View 中创建 CompanyForm 的单个实例,并使用 inlineformset_factory(Company, Employee, form=EmployeeForm)

保存表单集时:

if formset.is_valid():
for form in formset:
employee = form.save()
if form.cleaned_data['ext'] == True
Ext(employee=employee, ...).save()

如果您需要更多分机字段的用户输入,并且每个员工对于任何给定职位的输入都是相同的,则为该数据呈现一个附加表单。如果不同的员工有不同的 Ext 数据,那么事情会更复杂。

关于python - Django 表单集困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10609683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com