gpt4 book ai didi

python - Django 最佳实践。形式

转载 作者:行者123 更新时间:2023-11-30 22:42:29 24 4
gpt4 key购买 nike

我有一个与 django 中的表单相关的问题(我是新手)看。这里我的表格看起来像:

class ProccessAgentForm(forms.Form):
agent_id = forms.HiddenInput()
main_name = forms.IntegerField()
company_name = forms.CharField(max_length=60)
company_state = forms.CharField(max_length=60)
company_city = forms.CharField(max_length=60)
company_country = forms.CharField(max_length=60)
company_post_code = forms.IntegerField()
agent_first_name = forms.CharField(max_length=60)
agent_last_name = forms.CharField(max_length=60)
agent_phone = forms.CharField(max_length=60)
agent_fax = forms.CharField(max_length=60)
agent_email = forms.EmailField()
agent_city = forms.CharField(max_length=60)
agent_post_code = forms.IntegerField()
agent_state = forms.CharField(max_length=60)
agent_country = forms.CharField(max_length=60)
signer_first_name = forms.CharField(max_length=60)
signer_last_name = forms.CharField(max_length=60)
signer_title = forms.CharField(max_length=60)

我这样解析它(我知道这不是最好的选择):

form = ProccessAgentForm(request.POST)
if form.is_valid():
....
designated_company = DesignatedCompany()
designated_company.pdf_link = copyright_agent.pdf_link
designated_company.name = request.POST['company_name']
designated_company.address = company_address
designated_company.city = request.POST['company_city']
designated_company.post_code = request.POST['company_post_code']
designated_company.state = request.POST['company_state']
designated_company.country = request.POST['company_country']
designated_company.save()

agent = DesignatedAgent()
agent.company = designated_company
agent.first_name = request.POST['agent_first_name']
agent.last_name = request.POST['agent_last_name']
agent.email = request.POST['agent_email']
agent.address = agent_address
agent.city = request.POST['agent_city']
agent.country = request.POST['agent_country']
agent.post_code = request.POST['agent_post_code']
agent.state = request.POST['agent_state']
agent.fax = request.POST['agent_fax']
agent.phone = request.POST['agent_phone']
agent.save()

等等...我怎样才能使它更具可读性?我应该将逻辑拆分为形式吗?我了解模型表单,但正如您所见,我在这里有外键。如果您能提供更详细的回复,我将不胜感激:)

最佳答案

How can i make it more readable?

首先,您可以通过使用表单的 cleaned_data 而不是 request.POST 来使其更安全 - 它将包含已清理、清理并最终正确键入的值,而不是来自请求正文的原始字符串。

有点不相关,但当我们这样做时:邮政编码(邮政编码)不是整数,它是一个字符串(最终仅包含数字字符,具体取决于国家/地区)。

然后您可以使用objects.create()并直接传递数据,而不是创建空白模型实例,手动分配所有属性然后保存:

data = form.cleaned_data
designated_company = DesignatedCompany.objects.create(
pdf_link=copyright_agent.pdf_link,
name=data['company_name'],
address=company_address,
city=data['company_city'],
# etc
)

最后:只需使用一对 ModelForms 即可。

Should i split logic to forms ?

答案就在问题中。

I know about model Forms, but here i have foreign keys as you saw.

还有?怎么会出现问题呢?从 ModelForm 中排除您现在不需要/无法使用的字段,并在保存第二个表单时使用 commit=False 标志,以便您可以自己添加缺少的部分。

您甚至可以在您自己的“类表单”类中对两种表单和所有内部工作进行外观设计(该类不继承自 Form 但具有相同的 API - 至少您感兴趣的部分 - 并委托(delegate)给您的 CompanyForm 和 AgentForm),因此 View 的代码不必费心...

关于python - Django 最佳实践。形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42116508/

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