2017-03-05 60 views
0

在我的模型文件中,我有額外的類。django中的奇怪的AttributeError

這已經計算租賃基於其他模型LeaseExtra

class Extra(CommonInfo): 
     number = models.CharField(max_length=30,null=True, blank=True) 
     max_occupants = models.PositiveSmallIntegerField() 
     floor = models.PositiveSmallIntegerField() 
     _lease = None 


     def _get_total(self): 


      from lease.models import Lease 
      from conditions.models import LeaseExtra 

      le_dict = LeaseExtra.objects.filter(extra_id=self.id, is_active = True).aggregate(Max('id')) 

      if le_dict: 
       lease = le_dict.lease 
      else: 
       lease = 0 
      self._lease = lease 


class LeaseExtra(CommonInfo): 
    version = IntegerVersionField() 
    extra = models.ForeignKey(Extra,on_delete=models.PROTECT) 
    lease = models.ForeignKey(Lease,on_delete=models.PROTECT) 
    is_included = models.BooleanField(default=True) 

物業租賃爲什麼我收到錯誤在這個模型類?

異常值:

'字典' 對象沒有屬性 '租賃'

Traceback: 
File "C:\Users\PAPA\DEV\rent_unit\rent_unit_venv\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\PAPA\DEV\rent_unit\rent_unit_venv\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 
    22.     return view_func(request, *args, **kwargs) 
File "C:\Users\PAPA\DEV\rent_unit\src\unit\views.py" in extra_available_list 
    163.  extra_list = [obj for obj in extra_list if ((obj.lease)==0)] 
File "C:\Users\PAPA\DEV\rent_unit\src\unit\models.py" in lease 
    182.    self._get_total() 
File "C:\Users\PAPA\DEV\rent_unit\src\unit\models.py" in _get_total 
    160.    lease = le_dict.lease 

Exception Type: AttributeError at /unit/list/extra/available/ 
Exception Value: 'dict' object has no attribute 'lease' 
+1

來自docs:'aggregate()是QuerySet的一個終端子句,當被調用時,它返回名稱 - 值對的字典。 '鏈接到文檔https://docs.djangoproject.com/en/1.10/topics/db/aggregation/ – slackmart

+1

如果'le_dict'是一個字典,我不會指望它有一個租約屬性。 – Carcigenicate

回答

1

le_dict初始化爲一個查詢集因爲使用了「過濾器中的'功能。即它不是一個單一的對象實例。

因此,引用'lease'屬性是沒有意義的,因爲可能已經返回了許多LeaseExtra實例的查詢集。

如果您想引用特定模型實例的「租賃」,你可以這樣做:

le_dict = LeaseExtra.objects.get(pk=some_id) 

的get()方法要求使用一個唯一的標識符,如主鍵進行查詢。