+class NodeForm(forms.ModelForm):
+
+ def __init__(self, *args, **kwargs):
+ super(NodeForm, self).__init__(*args, **kwargs)
+ instance = self.instance
+ try:
+ self.fields['parent'].queryset = instance.node_ptr.__class__.objects.exclude(id=instance.id)
+ except ObjectDoesNotExist:
+ pass
+
+ def clean(self):
+ cleaned_data = self.cleaned_data
+ parent = self.cleaned_data['parent']
+ self.instance.validate_parents(parent)
+
+ try:
+ Node.objects.get(slug=self.cleaned_data['slug'], parent=parent)
+ raise ValidationError("A node with that path (parent and slug) already exists.")
+ except ObjectDoesNotExist:
+ pass
+
+ return cleaned_data
+
+class PageAdminForm(NodeForm):
+ class Meta:
+ model=Page
+
+class RedirectAdminForm(NodeForm):
+ class Meta:
+ model=Redirect
+
+class FileAdminForm(NodeForm):
+ class Meta:
+ model=File