2010-02-05 9 views
3

et j'ai simple ModelForm pour le paquetla validation des données dans Django ModelForm

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'] 

Comment puis-je demander au ModelForm de vérifier, dans la validation, si l'extension de fichier (classe est FileField) est .sh par exemple?

Y a-t-il un moyen de mettre cela en forme de modèle? de puis-je seulement le gérer dans une vue?

Merci

Edit: Aussi, oublié de demander, le modèle a un foreignkey au auth modèle utilisateur ... qui va contenir l'utilisateur actuel .. comment peut ModelForm gérer cela?

Merci encore


Merci pour la réponse! Je reçois la main sur ce .. même si je rencontre un problème

paquet contient un foreignkey à django.contrib.auth.models modèle utilisateur, Lorsque le formulaire est traité comment puis-je dire au ModelForm de passer l'utilisateur en cours objet à l'instance du modèle? je pensais que cela ...

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() 

i la écrasent les dans ModelForm initialisation:

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 est l'objet ForeignKey (User) ... il me donne un keyerror :(ce n'est pas bon ... Des solutions?

Merci!

Répondre

6

Vous devriez lire le document django sur la validation de l'exttra: http://docs.djangoproject.com/en/1.1/ref/forms/validation/#ref-forms-validation Vous avez juste besoin de définir une méthode clean_file().

+0

C'est génial! : D je vais utiliser ça: D mais dans le cas d'un fichier, est-ce que 'value' est un objet File? Si oui, comment puis-je évaluer son extension? – PirosB3

+0

value.name devrait être le nom, je pense. –

Questions connexes