没有PK或Slug的UpdateView

时间:2017-03-26 04:23:09

标签: django django-views

遇到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')

任何帮助都会得到很大的帮助!

1 个答案:

答案 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