簡體   English   中英

Django:盡管將user傳遞為kwarg,但是Form對象沒有屬性'user'?

[英]Django: Form object has no attribute 'user' despite passing user as kwarg?

我在視圖中實例化TransactionForm時遇到此錯誤。 追溯如下。

我希望這能起作用,因為在調用Form實例時我將“ user”作為關鍵字參數傳遞,所以我不確定這是什么問題?

File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\exception.py" in inner
  35.             response = get_response(request)

File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py" in _get_response
  128.                 response = self.process_exception_by_middleware(e, request)

File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\py\portfolio-project\myportfolio\views.py" in add_transaction
  122.  form = TransactionForm(user = request.user)

File "C:\py\portfolio-project\myportfolio\forms.py" in __init__
  36.       qs_coin = Coin.objects.get(user = self.user)

Exception Type: AttributeError at /myportfolio/add_transaction/
Exception Value: 'TransactionForm' object has no attribute 'user'

Views.py

def add_transaction(request):
    print(request.method)
    print("test1")

    if request.method == "GET":
        if request.is_ajax():
            print("ajax test")

            data = {
                'test': "test1"
            }

            form = TransactionForm(request.GET, user = request.user, coin_price = GetCoin(str(coin.coin)).price)

            return JsonResponse(data)


    form = TransactionForm(user = request.user)
    if request.method == "POST":
        print("test2")
        form = TransactionForm(request.POST, user = request.user)
        if form.is_valid():
            print("test3")
            obj = form.save(commit = False)
            obj.user = request.user
            obj.save()
            return HttpResponseRedirect('/myportfolio/')
        else: 
            print(form.errors)

    return render(request, 'myportfolio/add_transaction.html', {'form': form})

Forms.py

class TransactionForm(forms.ModelForm):     
    CHOICES = ((1, 'Buy'), (2, 'Sell'),)

    coin = forms.ModelChoiceField(queryset = Coin.objects.all()) 
    buysell = forms.ChoiceField(choices = CHOICES)

    field_order = ['buysell', 'coin', 'amount', 'trade_price']

    class Meta:
        model = Transactions
        fields = {'buysell', 'coin', 'amount', 'trade_price'}

    def __init__(self, *args, **kwargs):
        qs_coin = Coin.objects.get(user = self.user)
        super(TransactionForm, self).__init__(*args, **kwargs)
        self.fields['coin'].queryset = qs_coin
        self.fields['price'].queryset = self.coin_price

您將用戶傳遞為kwarg,但未將其分配給任何用戶。

def __init__(self, *args, **kwargs):
    self.user = kwargs.pop('user')

TrasactionForm.__init__方法中,您甚至在self.user尚未初始化之前就引用了self.user

您要做的是在使用構造函數之前將值分配給self.user 因此,嘗試將構造函數更改為:

class TransactionForm(forms.ModelForm):     
    # ... 

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        # rest of the constructor...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM