If I am not mistaken, the same way that you would construct a SQL query 
like 

SELECT * FROM table1 t1
INNER JOIN table2 t2 ON t2.t1_id = t1.id
INNER JOIN table3 t3 on t2.t3_id = t3.id
WHERE t3.id = '1'
AND t3.id = '2'
AND t3.id = '3'
AND t3.id = '4'
AND t3.id = '5'

(many AND t3.id = 'X')

you will have to set many Q instances or many filters, one for each id.

also, I believe that if you use Q instances only with & operations, you can 
just use filter and forget about Q.



On Saturday, May 5, 2012 6:22:43 PM UTC+2, Adriano Costa dos Reis wrote:
>
> Hey guys, I'm having a problem that I don't know if there is any 
> feature that I can use to filter a list in django. 
> What I'm trying to do is to use a manual get_or_create. I have the 
> following models: 
> class STREAM(models.Model): 
>         stream_inds = models.ManyToManyField('STREAM_Ind') 
>         Type = models.CharField(max_length = 5) 
>         Throughput = models.DecimalField(max_digits = 15, 
> decimal_places = 3) 
>
> class STREAM_Ind(models.Model): 
>         Port = models.IntegerField() 
>         Throughput = models.DecimalField(max_digits = 15, 
> decimal_places = 3) 
>
> What I've tried to do so far is this: 
>                                                try: 
>                                                         qset = ( 
>   
> Q(stream_inds__pk__iexact = ids) & 
>   
> Q(Type__iexact = type) & 
>   
> Q(Throughput__iexact = throughput) 
>                                                         ) 
>                                                         streams = 
> STREAM.objects.select_related().filter(qset).distinct().get() 
>                                                 except 
> STREAM.DoesNotExist: 
>                                                         fields = { 
>   
> 'Type': type, 
>   
> 'Throughput': throughput, 
>                                                         } 
>                                                         form = 
> STREAMForm(fields) 
>                                                         streams = 
> form.save() 
> The third line is where I think the problem is, ids is a variable that 
> contains a list of id that are supposed to match with all the primary 
> keys of the STREAM_Ind model. So I can be sure that the data is 
> already in the database, but the first Q object i think always return 
> false. Is there some way to do it? (I thought about using the "in" 
> feature, but I need to make sure all pk are matched in order to 
> retrieve the object, not just one of them). Is there a feature that 
> allow me to do that? If not can you guys give me a hint of what am I 
> supposed to do?

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/hpl0YkcKZkEJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

  • Compare List Adriano Costa dos Reis
    • Re: Compare List francescortiz

Reply via email to