2012-07-16 131 views
7

我在過濾一組模型中的對象時遇到了一些麻煩。這裏的問題是:Django模型由foreignkey篩選

我有3類:

class Autor(models.Model):  
    nome = models.CharField(max_length=50) 
    slug = models.SlugField(max_length=50, blank=True, unique=True) 
    foto = models.ImageField(upload_to='autores/', null=True, blank=True) 
    ... 

class CategoriaRecolha(models.Model): 
    categoria = models.CharField(max_length=30) 
    descricao = models.TextField() 
    slug = models.SlugField(max_length=30, blank=True, unique=True) 
    ... 

class Recolha(models.Model):  
    titulo = models.CharField(max_length=100) 
    slug = models.SlugField(max_length=100, blank=True, unique=True) 
    descricao = models.TextField() 
    ficha_tec = models.TextField() 
    categoria = models.ForeignKey(CategoriaRecolha) 
    autor = models.ForeignKey(Autor) 
    .... 

我試圖檢索是類作者日期,其中類領域categoria Recolha等於一個特定的領域值。

以更簡單的方式,我需要獲取參與特定類別的所有作者。

感謝

回答

17

更直接的選擇:

autors = Autor.objects.filter(recolha__categoria=MyCategoria) 

其中MyCategoria是相關CategoriaRecolha實例。或者,如果你想匹配agains的具體類別名稱,你可以擴展查詢另一個層面:

autors = Autor.objects.filter(recolha__categoria__categoria='my_category_name') 
+0

這是正是我一直在尋找。謝謝丹尼爾。 – maloky 2012-07-24 13:24:32

3
cat = CategoriaRecolha.objects.get(field=value) 
rows = Recolha.filter(categoria=cat) 
autors = [row.autor for row in rows] 

Django Docs解釋這相當不錯。

-1

在Django 2 ForeignKey.limit_choices_to docs

staff_member = models.ForeignKey(
    User, 
    on_delete=models.CASCADE, 
    limit_choices_to={'is_staff': True}, 
)