2014-07-14 28 views
0

我想通過「狀態」,這是一個額外的字段篩選過濾,但它不工作:不能被添加的字段在Django

serial_number_list = TestSerialNumber.objects.filter(test_pool = test_pool, status='rejected') 

我得到這個錯誤:

無法解析關鍵詞'狀態'放入字段中。選項包括:身份證,SERIAL_NUMBER,TEST_POOL,TestResult中,testrun

這是我的模型類:

class TestSerialNumber(models.Model): 
    serial_number = models.ForeignKey("core.SerialNumber", on_delete=models.PROTECT) 
    test_pool = models.ForeignKey("TestPool", blank=True, null=True) 

    def __unicode__(self): 
     return self.serial_number.serial_number 

    def panel_code(self): 
     return self.serial_number.panel.panel_code 

    def status(self): 
     try: 
      test_result = self.testresult_set.latest('report') 
     except TestResult.DoesNotExist: 
      return 'unknown' 
     else: 
      return test_result.test_status.name 

此外,出口到JSON的時候,我得到的只是字段:SERIAL_NUMBER和TEST_POOL,只是IDS而不是其餘。

在此先感謝!

+2

'status'不是一個領域,它是一種方法, 。 – alecxe

+1

請參閱[本] [1]鏈接瞭解如何使用自定義管理器。 [1]:http://stackoverflow.com/questions/5685037/django-filter-query-based-on-custom-function –

回答

0

如果你想做到這一點,你必須創建一個字段名「身份」

STATUS_CHOICES = (
    (1, 'rejected'), 
    (2, 'blabla'), 
) 

status = models.IntegerField(choices=STATUS_CHOICES) 
+0

,我不認爲這是正確的。代碼中的'status'來自外鍵關係中的最近項目。雖然每次通過信號添加或更新相關的TestResult時,您都可以開始跟蹤非規格化字段,但自定義管理器或原始sql可能更可取。 – Tom

+0

是的,我同意!這種情況只是一個例子,當對象通常不會改變,只是爲了過濾... – Lara

0

通過您所提供的代碼的結構,status不是一個領域的一個方法。因此,如果您想獲取狀態信息和對象,則需要先將其過濾出來,然後才能訪問該方法,該方法將返回該對象的status

serial_number_list = TestSerialNumber.objects.filter(test_pool = test_pool) 
print serial_number_list[0].status # as filter return a list 

這會給你這個對象的狀態。

的錯誤,當您試圖用無效的字段訪問的模式,由無效我的意思是現場出現Cannot resolve keyword 'status' into field. Choices are:id, serial_number, test_pool, testresult, testrun是多年平均值存在於modeldatabase