On May 25, 8:19 am, doniyor <doniyor....@googlemail.com> wrote:
> hey guys,
> i need to loop over the number of ids of objects in my db table and create
> accordingly the same number of html fields. how can i do it.. my effort is
> this:
>  numberOfIds = Produkt.objects.count()
>         i = 1;
>         for i in range(0,numberOfIds):
>             p = Produkt.objects.get(id=i)
>             #lookup in db and create html input field depending on the #of
> ids.
>             i=i+1

Django stuff set aside, the right way to iterate over a range in
Python is:

for i in range(0, x):
    print i


> but it says: Produkt matching query does not exist. i know, obviously it is
> not right,

You can be sure it _is_ right. Or do you think that no one would have
spot a bug in one of the most used features of a years tested
library ?

> but how is it possible?

create table foo(id int primary key auto_increment, num integer not
null);
insert into foo(num) values(1);
insert into foo(num) values(2);
insert into foo(num) values(3);
insert into foo(num) values(4);
select * from foo order by id;
delete from foo where id=2;
insert into foo(num) values(2);
select * from foo order by id;



If you want a list (well, a ValueQuerySet in this case) of
Produkts.id, the right call is:

ids = Produkt.objects.values_list("id", flat=True)

But iterating over this only to retrieve each produkt in a loop is a
waste of time and resources - you're doing N+1 queries instead of
_one_ single query. See Kenneth's post for the appropriate solution.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
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.

Reply via email to