2016-03-15 2 views
3

Я определил свою модель следующим образом и как определить запрос для фильтрации набора Sanity_Test, связанного с именем продукта Test_Product, в указанном списке имен? Большое спасибоКак определить фильтр запроса для следующей ситуации?

Например:

  1. Sanity_Test_A содержит Test_Product_A (название продукта было А), Test_Product_B (название продукта был Б)

  2. Sanity_Test_B содержит Test_Product_C (название продукта было А), Test_Product_D (название было C)

  3. Я хочу, чтобы фильтровать Sanity_Test список записей, которые это название продукта Test_Product пластинки является

APP: CT.model

class Sanity_Test(models.Model): 

    build  = models.OneToOneField('CI.Build')               
    system_test = models.ForeignKey(System_Test,null=True,blank=True) 

    ...... 


class Test_Product(models.Model): 

    product  = models.ForeignKey('CI.Product',verbose_name='Product')    
    sanity_test = models.ForeignKey(Sanity_Test) 

    ...... 


# APP : CI.model 
class Product(models.Model): 

    name = models.CharField(max_length=255,unique=True) 

    ...... 

The Test_Product Record Info

ответ

-1

Вы можете сделать что-то вроде:

sanity_test = [ test_product.sanity_set for test_productin Test_Product.objects.filter(product__name='A')] 

Это получает все Test_Product объекты с именем продукта A, а затем добавляет соответствующий sanity_test объект к списку

+0

Вот что я ожидал, спасибо большое за любезно помочь :) – JiangLing

2

Вы также можете сделать это с только один запрос с использованием reverse relationships:

sanity_test = Sanity_Test.objects.filter(test_product__product__name='A') 
+0

Да, потому что 'test_product' имеет внешний ключ' sanity_test'. Это называется «обратная связь». Из документов: «Он также работает в обратном направлении. Чтобы ссылаться на« обратные »отношения, просто используйте строчное имя модели». – ilse2005

+1

Мощный django, большое спасибо^O ^ – JiangLing

Смежные вопросы