Python 从modelform Django保存数据
现在抬起头来!我是刚从努伯斯维尔下车的努伯斯 所以我在做一个表单来加载信息并编辑表单信息,我很头疼。因此,我使用: Django:1.8 Pyhton:3.5.1 后端是sqlite 我正在使用form.ModelForm将信息加载到中,但当涉及到保存时,这就是我遇到的问题。文档非常混乱,我应该全部使用还是只使用一个干净的 这是forms.pyPython 从modelform Django保存数据,python,django,validation,modelform,Python,Django,Validation,Modelform,现在抬起头来!我是刚从努伯斯维尔下车的努伯斯 所以我在做一个表单来加载信息并编辑表单信息,我很头疼。因此,我使用: Django:1.8 Pyhton:3.5.1 后端是sqlite 我正在使用form.ModelForm将信息加载到中,但当涉及到保存时,这就是我遇到的问题。文档非常混乱,我应该全部使用还是只使用一个干净的 这是forms.py class EditContact(forms.ModelForm): class Meta: model = Contact
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_方法,但我认为我想要使用的是clean,在我看来应该使用所有方法
这是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
现在,模型上面的字段和类型都为blank=true和null=true,但被排除的字段date\u of\u条目除外
我发现,当在视图中调用is_valid()时,它会调用models.clean()但无法保存!!!我不知道为什么!我不知道如何进行验证。我想知道流程和所需的内容,甚至是表单验证的一个示例。我想您需要一些信息/答案,请查看您的代码注释。希望这有助于: 1) 如果需要处理特定于该字段的自定义内容,则只需使用clean_FIELDNAME函数。委员会: 因此,在该块中,他们正在检查提供的电子邮件列表是否包含特定的电子邮件 2) 这还显示了您在评论中提出的关于如何处理验证的另一个问题。您将在上面的代码片段中看到,您可以引发forms.ValidationError。下面将对此进行详细讨论: 因此,如果在任何一个clean_uu方法或主clean方法中出现错误,则.is_uvalid()形式将为false
这有用吗?我真的不明白你在问什么。如果在ContactID字段上没有任何自定义验证,为什么要定义
clean\u ContactID()
?你想达到什么目的?老实说,我不知道我是在遵循一个教程,并试图用我的个人项目。那么您的意思是使用clean()?好的,我会的,但它仍然失败,我不知道为什么我找到了解决我头痛的方法,我的一个字段是dateime,而我输入的日期格式错误。所以它期待着“08/16/2016”,而我进入了“2016/16/08”,这导致了它的失败。(验证)未来的人们也是如此!注意将数据输入表单的方式。尤其是约会!好的,我应该用clean()来清理所有的东西,明白了吗!还有一个附带的问题,它在我执行迁移之后添加了clean方法,但它未能更新迁移,这会导致任何清理错误吗?另外,我使用的是modelform,所以is clean()也适用于它,对吗?无论如何,我可以让系统打印出为什么它无法编辑我的联系人?验证方面的帮助就像self.cleaned_data.get['contactID']我想问很多我知道我只是不明白,所以迁移只会影响数据库,并根据模型更改更新它。我认为这不会对表单清理结果产生任何直接影响,除非您的模型更改由于字段不可为null或为空而导致验证失败。若要查看验证失败的原因,请尝试调试并单步执行检查f.is_valid()的“if条件”,或使用print(f.errors)打印到控制台,或在模板中显示用户的字段错误(您最终可能会这样做).查看Django文档:有关这些主题的更多信息,非常感谢!您帮助我更好地理解了clean()和验证,我通过删除所有clean()解决了它,并注意到我为datetimefield输入的日期错误,该字段现在正在工作,我可以轻松地编辑数据!很高兴我能帮忙。如果我的回答足够好,请随意接受。
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