【发布时间】:2018-10-17 12:06:32
【问题描述】:
这是我的表格:
class UploadForm(forms.ModelForm):
upload_what = forms.URLField()
upload_what.widget.attrs.update(size = '100')
所以它很简单,在用户粘贴link 后,我需要检查链接是否代表cat 或dog,根据这一发现,我将上传一个新的cat 或dog 在我遵循一些特定步骤后我的数据库中的对象。
我的问题是:
我将所有这些逻辑放在哪里?在view、form 或model?请记住,cat 和 dog 模型具有不同的字段,并且会在后台进行一些处理以确定必须填写哪些字段。
我确实读过这种做法是将所有逻辑放在models(胖模型)中,但在这里我真的不知道当用户触发Submit 按钮时我将使用哪个模型。
例如,在我的views.py 中,它可能看起来像这样:
def post(self,request,*args,**kwargs):
form = self.form_class(request.POST)
if form.is_valid():
link = form.cleaned_data['upload_what']
if link == "cat":
name = "some cat name"
legs = #do some logic here
# save cat to database
elif link == "dog":
#... some other logic here
#save dog to database
return HttpResponseRedirect('/success/')
【问题讨论】:
-
因为这是一个有点寻求意见的问题:我遵循一种模式,我创建了一个名为
applogic.py的单独模块,与models.py放在同一文件夹中。这个applogic模块充当您的视图和模型之间的“桥梁”,并包含您所描述的逻辑。在您的情况下,我可能会按照save_uploads(link, **form_data)的方式定义一个函数。这使您的视图保持干净,并允许您编写不隐藏在视图和表单处理程序中的可重用、可测试的代码。