2017-11-13 23 views
0

このインスタンスが表示されているため、次のタイプのエラーが発生します。従業員がユーザと企業との関係で従業員と関係している以下のモデルは、従業員に対する外部キーです。どのように私は会社のインスタンスを取得することでこれを解決することができますか?それとも何が問題なの?django - TypeErrorユーザーインスタンスから外部キーのインスタンスを取得する方法

この問題はされています。以下は

companysetting_form = CompanySettingEdit(instance = request.user.employee.company) 

は例外TypeError以下

TypeError at /employee/companysettings/  
__init__() got an unexpected keyword argument 'instance' 

Request Method: GET 
Request URL: http://127.0.0.1:8000/employee/companysettings/ 
Django Version: 1.11.7 
Exception Type: TypeError 
Exception Value:  
__init__() got an unexpected keyword argument 'instance' 
Exception Location: /Users/megasap/Documents/project/railercom/railercomapp/views.py in employee_companysettings, line 83 
Python Executable: /Users/megasap/Documents/project/myvirtualenv/railercom/bin/python 
Python Version: 3.6.3 
Python Path:  
['/Users/megasap/Documents/project/railercom', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', 
'/Users/megasap/Documents/project/myvirtualenv/railercom/lib/python3.6/site-packages'] 

では私のコードです:

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/views.py

@login_required(login_url='/employee/sign-in/') 
def employee_companysettings(request): 

companysetting_form = CompanySettingEdit(instance = request.user.employee.company) <---- this is the problem 

if request.method == "POST": 
    companysetting_form = CompanySettingEdit(request.POST, instance = request.user.employee.company) 

    if companysetting_form.is_valid(): 
     companysetting_form.save() 

return render(request, 'employee/account.html', { 
    "companysetting_form":companysetting_form 
    }) 

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/forms.py

class CompanySettingEdit(forms.Form): 
    name = forms.CharField(max_length=50, required=False) 
    tel = forms.CharField(max_length=50, required=False) 
    address_1 = forms.CharField(max_length=50, required=False) 
    address_2 = forms.CharField(max_length=50, required=False) 
    address_zip = forms.CharField(max_length=50, required=False) 
    address_city = forms.CharField(max_length=50, required=False) 
    address_state = forms.CharField(max_length=50, required=False) 
    address_country = forms.CharField(max_length=50, required=False) 

    class Meta: 
     model = Company 
     fields = ("name", "tel", "address_1", "address_2", "address_zip", 
        "address_city","address_state","address_country") 

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/templates/employee/companysettings.html

 <form method="POST" enctype="multipart/form-data"> 
     {% csrf_token %} 
     {% bootstrap_form companysetting_form %} 
     <button type="submit" class="btn btn-pink">Update</button> 
     </form> 

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/models.py

class Company(models.Model): 
    name = models.CharField(max_length=50) 
    tel = models.CharField(max_length=15, blank=True) 
    address_1 = models.CharField(max_length=50, blank=True) 
    address_2 = models.CharField(max_length=50, blank=True) 
    address_zip = models.CharField(max_length=20, blank=True) 
    address_city = models.CharField(max_length=20, blank=True) 
    address_state = models.CharField(max_length=20, blank=True) 
    address_country = models.CharField(max_length=20, blank=True) 

    logo = models.ImageField(upload_to='company_logo/', blank=False) 

    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    def __str__(self): 
     return self.name 
+0

'forms.Form'のコンストラクタは、' instance'キーワード引数を受け入れていないようです。コメントのお寄せいただきありがとうございます。ご指導をお願い致します。 – CristiFati

+0

このフォームは機能しますが、フォームデータをモデルに保存する必要があります。フォームコンストラクタで__init__を持つ必要がありますか?おかげさまで https://gist.github.com/anonymous/db51370aaf0ce759ab51cb24fc390633 – Axil

答えて

0

この質問は、外部キーとは何の関係もありません。

平野フォームサブクラスは、モデルについて何も知らない、内部クラスMetaを無視し、save方法を持っていない、とinstance引数を受け入れません。

これらのすべてを有効にするには、フォームをサブタイプforms.ModelFormにする必要があります。

これを行うと、モデル定義から取得されるので、クラス自体のすべてのフィールド定義を削除することができます。

関連する問題