从模型中保存数据Django

时间:2016-08-16 20:01:58

标签: python django validation modelform

现在抬头!我是NOO-BUS的NOOB-BUS新鲜的菜鸟!

所以我正在一个表单上加载信息并编辑表单信息,我很头疼。所以我正在使用:

Django:1.8 Pyhton: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()但是它无法保存!我不知道为什么!我不知道如何进行验证。我想知道这个过程和需要什么,甚至是一个表单验证字段的例子。

1 个答案:

答案 0 :(得分:1)

我认为你在这里想了解一些事情的信息/答案,看看你的代码评论。希望这会有所帮助:

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)这也显示了您在评论中询问的另一个问题,即如何处理验证。您将在上面的代码段中看到,您可以引发一个forms.ValidationError。这里将对此进行更多讨论:https://docs.djangoproject.com/en/1.10/ref/forms/validation/

因此,如果在任何clean_方法或main clean方法中引发错误,则form.is_valid()将为false。

这有帮助吗?

相关问题