2017-03-26 19 views
1

遇到UpdateView問題。我嘗試過編寫get_object,但我得到沒有PK或彈頭的UpdateView

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

CompanyData模型與用戶具有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默認的反向名稱:

如果不指定related_name參數爲OneToOneField,Django會使用目前的模式爲默認值的小寫名稱。

如果你想更明確的或使用其他名稱,然後在你的OneToOneField設置related_name

+0

謝謝!完美地工作,你花時間解釋答案背後的推理幫助我更多地瞭解了有關related_name和方法與屬性的內容。 – Dan

相關問題