Django ajouter un champ supplémentaire à un ModelForm généré à partir d'un Modèle
Je dois générer un FormSet à partir d'un modèle, mais j'ai besoin d'insérer une "plus-value" dans toutes les formes.
Précisément, j'ai une JApplet qui génère de certains Marqueurs et les Chemins d'accès sur une image et la mettre sur le serveur.
Dans mon modèle les lignes sont composées de deux Marqueurs. Mais quand je POSTE, parce que je suis en utilisant l'identifiant généré à partir de la JApplet et non à partir de la base de données, je ne sais à partir de laquelle les Marqueurs d'un Chemin d'accès sera composé.
Alors j'ai pensé à insérer une "identité temporaire" sur le Marqueur sur la forme, et de faire les dispositions correctes dans la vue avant d'enregistrer le Chemin d'accès.
J'ai pensé à la définition d'un formulaire personnalisé pour les marqueurs, mais il ne semble pas très SEC, et je ne veux pas revins à cette si je change le Marqueur de modèle.
Ici est de la forme:
class PointForm(forms.ModelForm):
temp_id = forms.IntegerField()
class Meta:
model = Point
def clean(self):
if any(self.errors):
# Don't bother validating the formset unless each form is valid on its own
return
ingresso = self.cleaned_data['ingresso']
ascensore = self.cleaned_data['ascensore']
scala = self.cleaned_data['scala']
if (ingresso and ascensore) or (ingresso and scala) or (ascensore and scala):
raise forms.ValidationError("A stair cannot be a elevator or an access!!!")
return self
def save(commit=True):
# do something with self.cleaned_data['temp_id']
super(PointForm).save(commit=commit)
Et le modèle:
class Point(models.Model):
RFID = models.CharField(max_length=200, blank=True)
x = models.IntegerField()
y = models.IntegerField()
piano = models.ForeignKey(Floor)
ingresso = models.BooleanField()
L'erreur:
ViewDoesNotExist at /admin/
Could not import buildings.views.getFloors. View does not exist in module buildings.views.
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/
Django Version: 1.4.1
Exception Type: ViewDoesNotExist
Exception Value:
Could not import buildings.views.getFloors. View does not exist in module buildings.views.
Exception Location: /usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py in get_callable, line 101
L'erreur est générée lorsque j'essaie de charger l'admin de la page, cette page n'a pas de références à tous avec le formulaire.
SOLUTION D'EXCEPTION
Ok, je vais écrire ici comment savoir pourquoi Django a été de faire une telle chose étrange.
Ici c'est une bonne façon de savoir ce qui est le problème.
L'exception a été levée, car j'ai oublié d'ajouter forms.py
à la from django import forms
.
- Et, si je supprime getFloors de url.py il appelle une erreur de manque de vue sur l'url suivant dans url.py... Est-ce un bug?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ajouter un champ à un ModelForm. Sauf si vous ajoutez un champ nommé temp_id à votre modèle, vous n'avez pas besoin de modifier ce formulaire lorsque vous changez votre modèle.
Exemple (avec un modèle nommé Point):
Mise à JOUR: Oublié de soi chez def enregistrer() et changé de nom de modèle de Point
clean
méthode qui n'est pas en cours d'exécution et je ne peux pas comprendre pourquoi. UGH.De suivi relekang réponse, j'ai dû être rappelé à également de retour la dernière ligne, comme indiqué, de sorte que l'objet de la get_absolute_url() la méthode peut être appelée automatiquement lors de la soumission du formulaire: