2016-12-27 7 views
0

在庫処理のインターフェイスでは、新しい金額の在庫アイテムの小数点を挿入する必要があります。この10進数を持つ取引は、在庫差引きから差額を追加することによって実際の値にアイテムを設定して発行されます。カスタムフォームを使用してオブジェクト上でアクションを実行するクラスベースのビューを作成する方法

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.")) 
内部のカスタムフォームに基づいて

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) 

:ヨーヨー私は小数点

views.pyを挿入するだけの場を提供するビューが追加されていないために

使用されているテンプレートは簡単です。

{% 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 %} 

これはPython2で動作しました。私はエラーに

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

を得ているのpython3でこれを使用していたときにでも、だから私は、クラスベースのビューコンテキストで、最近のジャンゴ・バージョンと、このような何かを行うための正しい方法とは何か思ったんだけど?

+1

'これは私が今確認されている参照され、あなたのエラーの原因ではありませんが、私は個人的に使用しますDecimal(self.request.POST ["amount"]) 'の代わりに' si.stock_report'への引数としてform.cleaned_data ['amount'] 'を使います。 –

答えて

2

forms.DecimalFieldの最初の位置引数はラベルではなく、最大値です。これは、文字列(その値)とint(フィールドの実際の値)を比較するエラーが発生する理由です。

一般的に使用すると、フォームフィールドクラスに位置引数を使用しないでください - 一貫kwargsからを使用します。

amount = forms.DecimalField(
    label=_("Parts now inside storage"), 
    ...) 
関連する問題