Für eine Inventurschnittstelle möchte ich, dass ein Benutzer eine Dezimalzahl für neue Mengen auf Lager einfügt. Mit diesem Dezimalwert wird eine Transaktion ausgegeben, die den Artikel aus der Bestandsaufnahme auf den tatsächlichen Wert setzt, indem er die Differenz addiert.So erstellen Sie eine klassenbasierte Ansicht mithilfe eines benutzerdefinierten Formulars, um eine Aktion für ein Objekt auszuführen
zu tun yo Ich habe das Dezimalsystem
views.py zum Einsetzen einer Ansicht bietet nur ein Feld hinzugefügt:
class StorageItemStockTakingView(FormView):
form_class = StockTakingForm
success_url = reverse_lazy('storage_item_list')
template_name = 'pmgmt/storageitem/stocktaking.html'
def form_valid(self, form):
si = StorageItem.objects.get(pk=self.kwargs["pk"])
si.stock_report(
Decimal(self.request.POST["amount"]), self.request.user)
return super(StorageItemStockTakingView, self).form_valid(form)
basierend auf einem benutzerdefinierten Formular innerhalb forms.py
class StockTakingForm(forms.Form):
amount = forms.DecimalField(
_("Parts now inside storage"),
max_digits=10,
decimal_places=4,
help_text=_("The amount of currently inside storage place."))
Die verwendete Vorlage ist leise einfach:
{% extends "base.html" %}
{% load i18n %}
{% load semanticui %}
{% block content %}
<h1>{{ object }}</h1>
<p>{% trans "It will create an Transaction adjusting the amount for items on stock to reported one.." %}</p>
<form method="post" class="ui form segment">
{% csrf_token %}
{{ form|semanticui }}
<input class="ui button blue" type="submit" value="Submit">
</form>
{% endblock %}
Das hat mit Python2 funktioniert. Aber wenn ich mit diesem auf Python3 Ich erhalte einen Fehler
2016-12-27 19:17:57,206 django.request 24760 Thread-2 ERROR Internal Server Error: /pmgmt/storageitem/1/stocktaking/
Traceback (most recent call last):
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/views/generic/base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/views/generic/edit.py", line 221, in post
if form.is_valid():
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/forms.py", line 161, in is_valid
return self.is_bound and not self.errors
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/forms.py", line 153, in errors
self.full_clean()
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/forms.py", line 362, in full_clean
self._clean_fields()
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/forms.py", line 380, in _clean_fields
value = field.clean(value)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/fields.py", line 168, in clean
self.run_validators(value)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/fields.py", line 151, in run_validators
v(value)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/core/validators.py", line 310, in __call__
if self.compare(cleaned, self.limit_value):
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/core/validators.py", line 324, in <lambda>
compare = lambda self, a, b: a > b
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/utils/functional.py", line 148, in __lt__
return self.__cast() < other
TypeError: unorderable types: str() < decimal.Decimal()
2016-12-27 19:17:57,206 django.request 24760 Thread-2 ERROR Internal Server Error: /pmgmt/storageitem/1/stocktaking/
Traceback (most recent call last):
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/views/generic/base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/views/generic/edit.py", line 221, in post
if form.is_valid():
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/forms.py", line 161, in is_valid
return self.is_bound and not self.errors
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/forms.py", line 153, in errors
self.full_clean()
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/forms.py", line 362, in full_clean
self._clean_fields()
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/forms.py", line 380, in _clean_fields
value = field.clean(value)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/fields.py", line 168, in clean
self.run_validators(value)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/forms/fields.py", line 151, in run_validators
v(value)
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/core/validators.py", line 310, in __call__
if self.compare(cleaned, self.limit_value):
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/core/validators.py", line 324, in <lambda>
compare = lambda self, a, b: a > b
File "/home/frlan/quellen/partuniverse/p3/lib/python3.5/site-packages/django/utils/functional.py", line 148, in __lt__
return self.__cast() < other
TypeError: unorderable types: str() < decimal.Decimal()
Also ich frage mich, was ist der richtige Weg, der in einem klassenbasierten Ansicht Zusammenhang mit dem jüngsten Django-Versionen so etwas wie dies zu tun?
Dies ist nicht die Quelle des Fehlers, die ich sehe, ist jetzt identifiziert worden, aber ich persönlich würde verwenden ' form.cleaned_data ['amount'] 'als arg zu' si.stock_report' anstelle von 'Decimal (self.request.POST [" amount "])'. –