验证Django ModelForm中的数据

时间:2010-02-05 21:58:02

标签: django validation django-forms filefield

我有一个简单的Package

模型
from models import Package
from django import forms

class PackageForm(forms.ModelForm):
class Meta:
    model= Package
    fields= ['name', 'version', 'url', 'description', 'arch', 'dependancies', 'conflicts', 'file']

我如何要求模型在验证中检查文件扩展名(类是FileField)是否为.sh,例如?

有没有办法把它放在模型中?我只能在视图中管理吗?

由于

编辑: 另外,忘了问一下,模型有auth用户模型的外键...它将包含当前用户..模型如何管理?

再次感谢


谢谢你的回答!我抓住了这个......虽然我遇到了问题

包中包含一个外键给django.contrib.auth.models用户模型, 处理表单时如何告诉modelform将当前用户对象传递给模型实例? 我想到了这个......

views.py

def add(request):
if request.method == 'POST':
    the_model= PackageForm(request.user, request.POST, request.FILES)
    if the_model.is_valid():
        the_model.save()

我覆盖了模型中的 init

from models import Package
from django import forms

class PackageForm(forms.ModelForm):
def __init__(self,user,*args,**kwargs):
        super (PackageForm,self ).__init__(*args,**kwargs) # populates the post
        self.fields['maintainer_name'].queryset = user # adds the user object passed by add in views.py
class Meta:
    model= Package
    fields= ['name', 'version', 'url', 'description', 'arch', 'dependancies', 'conflicts', 'file']

manteiner_name是ForeignKey(用户)对象... 它给了我一个keyerror :(那不好...... 任何解决方案?

谢谢!

1 个答案:

答案 0 :(得分:6)

您应该阅读有关进行额外验证的django文档:http://docs.djangoproject.com/en/1.1/ref/forms/validation/#ref-forms-validation您只需要定义clean_file()方法。