验证Django ModelForm中的数据

Pir*_*sB3 3 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']
Run Code Online (Sandbox Code Playgroud)

我如何要求模型在验证中检查文件扩展名(类是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()
Run Code Online (Sandbox Code Playgroud)

我在modelform中覆盖了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']
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Ale*_*nor 6

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