Django Voeg extra veld toe aan een modelform dat is gegenereerd uit een model

Ik moet een formset van een model genereren, maar ik moet een “extra waarde” invoegen in elk formulier.

Specifiek heb ik een japplet dat enkele markeringen en paden op een afbeelding genereert en op de server staat.

In mijn modellijnen zijn samengesteld uit twee markers. Maar wanneer ik het post, omdat ik de ID van het japplet gebruik en niet uit de database gebruik, zal ik niet weten waarvan markers een pad zullen worden gecomponeerd.

Dus dacht ik om een ​​”tijdelijke ID” op de markering op het formulier in te voegen en de juiste regelingen in de weergave te doen voordat u het pad opslaat.

Ik dacht aan het definiëren van een aangepaste vorm voor de markers, maar het lijkt niet erg droog te zijn, en ik wil dit niet teruggekomen als ik het markeringsmodel verander.

Hier is het formulier:

 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)

en het model:

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

De fout:

 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

De fout wordt gegenereerd wanneer ik probeer de beheerderspagina te laden, deze pagina heeft helemaal geen referenties met het formulier.

oplossing voor uitzondering

Ok, ik zal hier schrijven hoe te ontdekken waarom Django zo vreemd ding aan het doen was.

Hier is het een juiste manier om erachter te komen wat het probleem is.

De uitzondering werd gegooid omdat ik het vergat forms.pytoe te voegen aan de from django import forms.


Antwoord 1, Autoriteit 100%

U kunt een veld toevoegen aan een modelform. Tenzij u een veld met de naam TEMP_ID aan uw model toevoegt, hoeft u dit formulier niet te wijzigen wanneer u uw model wijzigt.

voorbeeld (met een model met de naam):

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)

Update: Vergeten Zelf in def Save () en gewijzigd ModelName om te wijzen


Antwoord 2, Autoriteit 6%

Om het antwoord van Relekang op te volgen, moest ik eraan herinnerd worden aan retour de laatste regel zoals getoond, zodat de methode van de get-get_absolute_url () automatisch kan worden opgeroepen in het indienen van het formulier:

return super(PointForm, self).save(commit=commit)

Other episodes