遇到UpdateView问题。我已经尝试过编写get_object,但我正在
AttributeError at /companydata/update/
'User' object has no attribute 'get_companydata'
CompanyData Model与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')
任何帮助都会得到很大的帮助!
答案 0 :(得分:1)
User
对象没有名为get_companydata
的方法,因此您的错误。您需要像这样访问反向的一对一关系:
def get_object(self):
return self.request.user.companydata
companydata
是一个属性,而不是一个方法(即不要用括号调用它)。这是one-to-one relationship的默认反向名称:
如果没有为
related_name
指定OneToOneField
参数,Django将使用当前模型的小写名称作为默认值。
如果您想更明确或使用其他名称,请在related_name
上设置OneToOneField
。