从模型形式 Django 保存数据
Posted
技术标签:
【中文标题】从模型形式 Django 保存数据【英文标题】:Saving data from a modelform Django 【发布时间】:2016-08-16 20:01:58 【问题描述】:现在抬头!我是 NOOBSVILLE 的 NOOB-BUS 上的新手!
所以我正在处理一个表单来加载信息并编辑该表单信息,我很头疼。所以我正在使用:
姜戈:1.8 皮顿:3.5.1 后端是 sqlite
我正在使用 form.ModelForm 将信息加载到其中,但是在保存时,这就是我卡住的地方。我应该使用全部还是只使用一个干净的文档,文档非常混乱。
这是forms.py
class EditContact(forms.ModelForm):
class Meta:
model = Contact
#the list of all fields
exclude = ['date_modified']
def clean(self):
if self.date_of_entry is None:
print("looking to see what works")
self.date_of_entry = datetime.date.today()
return
def clean_ContactID(self):
#see this line below this comment i dunno what it does
ContactID= self.cleaned_data.get('ContactID')
print ("cleaning it")
# i also dont know what validation code suppose to look like
# i cant find any working examples of how to clean data
return ContactID
现在主要有更多的 def clean_methods 但我认为我想要使用的是干净的,除了我认为应该使用所有其他方法。
这是在 view.py 中
def saveContactInfo (request):
#this part i get
if request.user.is_authenticated():
ContactID= request.POST['ContactID']
a = ListofContacts.objects.get(ContactID=ContactID)
f = EditContact(request.POST,instance=a)
print("plz work!")
if f.is_valid():
f.save()
return render (request,"Contactmanager/editContact.html", 'contactID': contactID)
else:
return HttpResponse("something isnt savin")
else:
return HttpResponse("Hello, you shouldnt ")
这是model.py
def clean(self):
if self.ConactID is None:
raise ValidationError(_('ContactID cant be NULL!'))
if self.date_of_entry is None:
print("think it might call here first?")
self.date_of_entry = datetime.date.today()
print ( self.date_of_entry )
if self.modified_by is not None:
self.modified_by="darnellefornow"
print(self.modified_by )
if self.entered_by is not None:
self.entered_by = "darnellefornow"
print(self.entered_by )
ContactID = self.cleaned_data.get('ContactID')
return
现在模型上面的字段和类型都有空白 = true 和 null = true 除了排除字段 date_of_entry
我发现当在视图中调用 is_valid() 时,它会调用 models.clean() 但无法保存!!!我不知道为什么!我不知道如何进行验证。我想知道流程和需要什么,甚至是表单验证字段的示例。
【问题讨论】:
我真的不明白你在这里问什么。如果您对 ContactID 字段没有任何自定义验证,为什么要定义clean_ContactID()
?你想达到什么目的?
老实说,我不知道我正在学习教程并在我的个人项目中尝试它。所以你说的只是使用 clean()?好的,我会的,但它仍然失败,我不知道为什么
好吧,伙计们,我找到了解决我头痛的方法,我的一个字段是日期时间,我输入的日期格式错误。所以它期待“08/16/2016”而我输入“2016/16/08”导致它失败。 (验证)所以对于未来的人!观察您将数据输入表单的方式。尤其是日期!
【参考方案1】:
我认为您在查看您的代码 cmets 时需要有关这里的几件事的信息/答案。希望这会有所帮助:
1) 如果您需要专门为该字段处理自定义内容,则只需使用 clean_FIELDNAME 函数。 Django docs show this as an example:
def clean_recipients(self):
data = self.cleaned_data['recipients']
if "fred@example.com" not in data:
raise forms.ValidationError("You have forgotten about Fred!")
# Always return the cleaned data, whether you have changed it or
# not.
return data
因此,在该块中,他们正在检查提供的电子邮件列表是否包含特定电子邮件。
2) 这也显示了您在 cmets 中询问的有关如何处理验证的另一个问题。您将在上面的 sn-p 中看到,您可以引发 forms.ValidationError。此处对此进行了更多讨论:https://docs.djangoproject.com/en/1.10/ref/forms/validation/
因此,如果任何这些 clean_ 方法或主 clean 方法中出现错误,则 form.is_valid() 将为 false。
这有帮助吗?
【讨论】:
好的,所以我应该使用 clean() 来清理所有内容!还有一个附带问题,它在我进行迁移后添加了 clean 方法并且它未能更新迁移会导致清理中的任何错误吗?我也在使用modelform,所以clean()也可以使用它吗?无论如何,我也可以让系统打印出为什么它无法编辑我的联系人?并且帮助验证会很好,就像 self.cleaned_data.get['contactID'] 我要求很多我知道我只是困惑 当然,因此迁移只会影响数据库并根据您的模型更改对其进行更新。我认为它不会对表单清理结果产生任何直接影响,除非您的模型更改由于字段不可为空或为空而导致验证失败。要查看验证失败的原因,请尝试调试并单步执行检查 f.is_valid() 的“if 条件”,或使用 print(f.errors) 打印到控制台,或在模板中显示字段错误你的用户(你最终可能会这样做)。 查看 Django 文档:docs.djangoproject.com/en/1.10/ref/forms/api/… 和 docs.djangoproject.com/en/1.10/topics/forms/… 了解有关这些主题的更多信息 非常感谢!你帮助我更好地理解了 clean() 和验证,我通过删除所有 clean() 解决了它,并注意到我输入的日期时间字段错误,现在正在工作我可以轻松编辑数据 太棒了!很高兴我能帮上忙。如果我的回答足够好,欢迎采纳。以上是关于从模型形式 Django 保存数据的主要内容,如果未能解决你的问题,请参考以下文章
在数据库中保存 Django 的表单向导 form_list 的最简单方法?