Django ajoute un champ supplémentaire à une forme de modèle générée à partir d'un modèle

je dois générer un FormSet à partir d'un modèle mais je dois insérer une" valeur supplémentaire " dans chaque forme.

spécifiquement, j'ai un JApplet qui génère des marqueurs et des chemins sur une image, et le poste sur le serveur.

dans mon modèle, les lignes sont composées à partir de deux marqueurs. Mais quand je le posterai, parce que j'utilise l'id généré à partir du JApplet et non de la base de données, Je ne saurai pas à partir de quels marqueurs un chemin sera composé.

donc j'ai pensé à insérer un" identifiant temporaire " sur le marqueur sur le formulaire, et faire les arrangements corrects dans la vue avant de sauvegarder le chemin.

j'ai pensé à définir une forme personnalisée pour les marqueurs, mais elle ne semble pas être très sèche, et je ne veux pas revenir à cela si je change le modèle de marqueur.

voici le formulaire:

  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 la page d'administration, cette page n'a aucune référence avec le formulaire.

SOLUTION FOR EXCEPTION

Ok, je vais écrire ici comment trouver pourquoi Django faisait une chose aussi étrange.

Ici c'est une bonne façon de savoir quel est le problème.

l'exception a été lancée parce que je j'ai oublié d'ajouter forms.py au from django import forms .

47
demandé sur Community 2012-11-25 15:16:21

2 réponses

vous pouvez ajouter un champ à une fiche modèle. 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):

class PointForm (forms.ModelForm):
    temp_id = forms.IntegerField()

    class Meta:
        model = Point

    def save(self, commit=True):
        # do something with self.cleaned_data['temp_id']
        return super(PointForm, self).save(commit=commit)

mise à jour: J'ai oublié de m'enregistrer dans Def () et j'ai changé le nom du modèle en point

57
répondu relekang 2015-03-21 22:20:27

pour suivre la réponse de relekang, il a fallu me rappeler aussi retourner la dernière ligne comme indiqué, de sorte que la méthode get_absolute_url() de l'objet pourrait être automatiquement appelé sur la soumission du formulaire:

return super(PointForm, self).save(commit=commit)
5
répondu ZG101 2017-05-23 12:34:41