【发布时间】:2011-06-29 07:42:05
【问题描述】:
嗯,这实际上可能是一个简单的案例,但我很难弄清楚。
我有两个用户注册渠道(公司和其他所有人)。当企业用户通过我的注册表单创建 User 实例时,我还希望他们输入创建相关实例的辅助表单(基于 Website 和 Organization_Contact 模型)。
我知道如何通过发出额外的同步或异步请求来解决这个问题,但我希望用户填写三个表单并一键提交。
我的问题是其他两种形式依赖于用户外键作为字段。我已经将该字段设置为“null=True,blank=True”,这样我就可以在没有外键的情况下验证和保存表单,但我最终想将该键添加到两个模型实例中。
我认为我可以验证三个表单,保存 UserForm,然后使用模型查询集返回新的 User.id(全部在一个视图中)。然后,我将该 user_id 值添加到其他两个表单字典(WebsiteForm 和 Organization_ContactForm)。
它会这样工作:
def register_company(request):
if request.method=='POST'
uform=UserCreationForm(request.POST, prefix='user')
sform=SiteForm(request.POST, prefix='site')
oform=OrgForm(request.POST, prefix='site')
if uform.is_valid() and sform.is_valid() and oform.is_valid():
uform.save()
user=User.objects.get(email__iexact=uform.cleaned_data['email'])
uid=unicode(user.id)
#now I'd add uid back into the SiteForm and Orgform dictionaries and then save both instances
问题: 1) 不确定我是否可以保存模型表单,然后将该模型实例作为查询集返回到单个视图中
2)我说我不确定,因为我无法通过尝试将变量传递给查询集的问题。
get manager 方法似乎不接受那里的变量。我假设是因为我传递了一个等效的硬编码字符串并且它起作用了。
好的,所以我正在考虑创建一个新的管理器方法(电子邮件),它接受一个变量参数(清理后的电子邮件字段),然后重试保存一个模型表单、检索模型 ID 数据和保存其他模型表单的过程.
我还认为我可以通过保存后信号来处理这个问题。
这里只是大致的方向会非常有帮助。我需要一个起点。
【问题讨论】:
标签: django django-queryset modelform