Comment pourrions-nous rendre la forme de django non valide si nous modifions, pas en ajoutant un nouvel enregistrement. Le code comme suit:Comment valider le formulaire django uniquement en ajoutant ne pas éditer
class PageForm(forms.Form):
name = forms.CharField(max_length=100,widget=forms.TextInput(attrs={'class':'textInput'}))
description = forms.CharField(max_length=300, required=False,widget=forms.TextInput(attrs={'class':'textInput'}))
body = forms.CharField(widget=forms.Textarea)
template = forms.CharField(max_length=30,widget=forms.TextInput(attrs={'class':'textInput'}))
navbar = forms.BooleanField(required=False, widget=forms.Select(choices=(('True','True'),
('False', 'False'))))
publish = forms.BooleanField(widget=forms.Select(choices=(('Published','Publish Now'),
('Private','Private'),
('Draft','Draft'))))
def save(self, page=None, commit=True):
data = self.cleaned_data
if not page:
page = models.Page(key_name=data['name'].replace(' ','-'))
page.name = data['name']
page.description = data['description']
page.body = data['body']
page.template = data['template']
page.publish = data['publish']
if commit: page.put()
return page
# prevent the same page 's name
def clean_name(self):
name = self.cleaned_data['name']
query = models.Page.all(keys_only=True)
query.filter('name = ', name)
page = query.get()
if page:
raise forms.ValidationError('Page name "%s" was already used before' % name)
return name
Le but de cette validation de nom est d'empêcher les enregistrements portant le même nom. BUt je l'ai trouvé, il valide aussi sur edit, donc nous ne pouvions pas éditer les enregistrements, puisqu'il dira que 'les enregistrements avec le même nom existent déjà'.
En fait, pour l'édition, la fonction de sauvegarde de la page ne sera pas, mais l'enregistrement précédent à la place, et ne sera pas en enregistrer un nouveau. Mais comment nous lisons ce param, sur la fonction clean_name afin que nous puissions maintenant savoir si c'est l'édition ou la création?
Merci beaucoup!
Quelle que soit la raison pour laquelle vous n'utilisez pas ModelForm pour générer le formulaire à partir du modèle Page à la place? Avec key_name comme unique SlugField – sunn0