Ich bin neu in Django und ich habe gekämpft, um den ausgewählten Wert der forms.ModelChoiceField
in meinen Ansichten zu bekommen. Mein Formular (Post) ist nicht gültig und ich habe festgestellt, dass request.POST alle möglichen Werte im ModelChoiceField zurückgibt. Wie bekomme ich nur das vom Benutzer ausgewählte Modell? Vielen Dank im Voraus für jede Hilfe.Django ungültiges Formular bei der Verwendung von Modelchoicefield
Modell
I ein Sensormodell sowie ein Messmodell ...
class Sensor(models.Model):
# This contains information about a sensor, type, location, and other
type = models.CharField(max_length=16)
...
class Measurement(models.Model):
#This contains the measurements of the sensors at a given date
sensor = models.ForeignKey('Sensor')
date = models.DateField()
temperature = models.FloatField()
pressure = models.FloatField()
...
class Meta:
unique_together = ('sensor', 'date')
Formular
... und eine Form haben, die dem Benutzer ermöglicht, Wählen Sie den Sensor und das Datum:
class MeasurementForm(forms.ModelForm):
#the user is allowed to choose any sensor that is related to the measurement table
sensor = forms.ModelChoiceField(queryset=Sensor.objects.exclude(measurement=None))
date = forms.DateField(widget=DateInput(attrs={'format':'%Y-%m-%d'}), initial=datetime.today)
Soweit so gut, wird dies durch die Get-Methode gerendert und der Benutzer kann Sensor und Datum auswählen. Allerdings schlägt die folgende Ansicht bei der Post, nach der Einreichung:
Ansichten
class MeasurementView(View):
form_class = MeasurementForm
my_template = "measurement.html"
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.my_template, {'form': form, 'data':None})
def post(self, request, *args, **kwargs):
print(request.POST)
print(new_form.errors)
new_form = self.form_class(data=request.POST)
if new_form.is_valid():
print('form is valid')
data = get_data_for_sensor_date(
new_form.cleaned_data['sensor'],
new_form.cleaned_data['date']))
return render(request, self.my_template, {'form':new_form, 'data':data})
else:
return render(request, self.my_template, {'form':new_form, 'data':None})
Konsolenausgabe
<QueryDict: {'sensor': ['', '1'],
'csrfmiddlewaretoken': ['YUPfrdhdbQdAa7EyNx2sJeHdbxmQXTTW'],
'date': ['2016-11-07']}>
<ul class="errorlist">
<li>__all__
<ul class="errorlist nonfield">
<li>Measurement with this Sensor and Date already exists.
</li>
</ul>
</li>
</ul>
Danke. Bearbeiten Sie den Code ab sofort – b3rtz
wie werden Sie das Formular in der Vorlage angezeigt wird? Drucken 'request.POST' und' new_form.errors' im 'Post' Verfahren könnte helfen zu erklären, was vor sich geht. – Alasdair
Frage aktualisiert, um th hinzuzufügen Das Ergebnis des Druckens. Ich bekomme die Fehlermeldung nicht. Ich weiß, dass sie existieren und genau das brauche ich. – b3rtz