2017-03-26 17 views
1

UpdateViewに問題があります。私はget_objectを書こうとしましたが、取得していますPKまたはスラッグのないUpdateView

AttributeError at /companydata/update/ 
'User' object has no attribute 'get_companydata' 

CompanyDataモデルはUserとOneToOne関係にあります。ここで

は私のコードです:

urls.py

### Omitted ### 
url(r'^update/$', CompanyDataUpdateView.as_view(), 
    name='companydataupdate') 
### Omitted ### 

views.py

class CompanyDataUpdateView(UpdateView): 
    model = CompanyData 
    fields = ['arr', 'num_cust'] 
    template_name = 'company_data/companydata_form.html' 

    def get_object(self): 
     return self.request.user.get_companydata() 

models.py

class CompanyData(models.Model): 
    user = models.OneToOneField(User) 
    arr = models.DecimalField(max_digits=20, decimal_places=2, validators=[MinValueValidator(1)]) 
    num_cust = models.IntegerField(validators=[MinValueValidator(1)]) 


    def get_absolute_url(self): 
     return reverse('companyrevenue') 

すべてのヘルプは大apprecaitedされます!

答えて

1

Userオブジェクトにはget_companydataというメソッドがありません。エラーです。

def get_object(self): 
    return self.request.user.companydata 

companydataは(すなわち、括弧でそれを呼び出すことはありません)プロパティ、メソッドではないです:あなたはそうのような逆の一対一の関係にアクセスする必要があります。これがone-to-one relationshipのためのデフォルトの逆方向の名前です:

あなたはOneToOneFieldためrelated_name引数を指定しない場合、Djangoはデフォルト値として現在のモデルの小文字の名前を使用します。

もっと明示的にするか、別の名前を使用する場合は、OneToOneFieldrelated_nameを設定してください。

+0

ありがとうございました!完璧に作業し、答えの裏にある推論の説明に費やした時間は、related_nameとメソッドとプロパティについて少し分かりました。 – Dan

関連する問題