Vous n'êtes pas identifié(e).
Bonsoir,
J'ai remarqué que mon filter en ligne de commande ne fonctionne pas
>>> from app.models import Device
>>> list = Device.objects.filter(author__icontains='user')
>>> print list
Voici le modèle :
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
class Device(models.Model):
# main fields
name=models.CharField(max_length=64, help_text="maximum 64 characters")
description=models.TextField()
url = models.URLField(verify_exists=True, max_length=200)
# meta
author = models.ForeignKey(User)
pub_date = models.DateTimeField(default=datetime.now())
def __unicode__(self):
return self.name
Voici le log:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/manager.py", line 141, in filter
return self.get_query_set().filter(*args, **kwargs)
File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/query.py", line 550, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/query.py", line 568, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/sql/query.py", line 1172, in add_q
can_reuse=used_aliases, force_having=force_having)
File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/sql/query.py", line 1107, in add_filter
connector)
File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/sql/where.py", line 67, in add
value = obj.prepare(lookup_type, value)
File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/sql/where.py", line 316, in prepare
return self.field.get_prep_lookup(lookup_type, value)
File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/fields/related.py", line 141, in get_prep_lookup
raise TypeError("Related Field has invalid lookup: %s
Merci d'avance si pouvez m'aider.
Hors ligne
Bonsoir
ca depend de ce que tu veux filter
si c'est l'existence d'un user 'au bout' de la FK:
list = Device.objects.filter(author__isnull=False')
si c'est sur un champ de l'objet user:
list = Device.objects.filter(author__lastname__icontains='user')
le double underscore te permet de suivre la relation
RM
Richard Moch
http://www.rootsaka.com
On Wed, Sep 7, 2011 at 20:58, Michael <michael.jespersen _AT_ gmail.com> wrote:
> Bonsoir,
>
> J'ai remarqué que mon filter en ligne de commande ne fonctionne pas
>
>
>
>>>> from app.models import Device
>>>> list = Device.objects.filter(author__icontains='user')
>>>> print list
>
>
> Voici le modèle :
>
> from django.db import models
> from datetime import datetime
> from django.contrib.auth.models import User
>
> class Device(models.Model):
> # main fields
> name=models.CharField(max_length=64, help_text="maximum 64
> characters")
> description=models.TextField()
> url = models.URLField(verify_exists=True, max_length=200)
>
> # meta
> author = models.ForeignKey(User)
> pub_date = models.DateTimeField(default=datetime.now())
>
> def __unicode__(self):
> return self.name
>
>
> Voici le log:
>
> Traceback (most recent call last):
> File "<console>", line 1, in <module>
> File
> "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/manager.py",
> line 141, in filter
> return self.get_query_set().filter(*args, **kwargs)
> File
> "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/query.py",
> line 550, in filter
> return self._filter_or_exclude(False, *args, **kwargs)
> File
> "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/query.py",
> line 568, in _filter_or_exclude
> clone.query.add_q(Q(*args, **kwargs))
> File
> "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/sql/query.py",
> line 1172, in add_q
> can_reuse=used_aliases, force_having=force_having)
> File
> "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/sql/query.py",
> line 1107, in add_filter
> connector)
> File
> "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/sql/where.py",
> line 67, in add
> value = obj.prepare(lookup_type, value)
> File
> "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/sql/where.py",
> line 316, in prepare
> return self.field.get_prep_lookup(lookup_type, value)
> File
> "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/db/models/fields/related.py",
> line 141, in get_prep_lookup
> raise TypeError("Related Field has invalid lookup: %s
>
>
> Merci d'avance si pouvez m'aider.
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
Merci Richard de ta réponse.
Je cherche à retrouver tous les éléments qui appartiennent à un certain utilisateur. C'est pour faire une view qui regroupe les objets par nom d'utilisateurs. avec une URL du type :
(r'^lists/(?P<username>\w+)/$', 'app.views.user_list')
Donc, c'est plutôt un filtre qui va ressembler un peu à ça :
Device.objects.filter(author__lastname__icontains='user')
Ceci dit, je ne vois pas à quoi correspond "lastname" dans ce filtre.
Dans mon modèle, je n'ai que le champs "author" qui est un ForeignKey sur les User
J'ai trouvé un petit article (de 2006) qui décris comment faire ce que je cherche. Mais c'est pareil, je ne vois pas à quoi correspond owner et username dans le filtre.
todo_lists = TodoList.objects.filter(owner__username__exact=username)
Hors ligne
owner ou lastname sont des noms de champs arbitraires, à titre
d'exemple. Contrairement à icontains qui est une fonction de
comparaison
donc User est un objet django, dont last_name est la propriété qui
contient le nom de famille du user
dans mon exemple je supposai que tu cherche sur le nom de famille du
utilisateur.
A ce stade je t'invite à lire la doc des Queryset. Tu ne peux pas y
échapper pour avancer ;-)
https://docs.djangoproject.com/en/1.3/topics/db/queries/
RM
Richard Moch
http://www.rootsaka.com
2011/9/8 Michael <michael.jespersen _AT_ gmail.com>:
> Merci Richard de ta réponse.
>
> Je cherche à retrouver tous les éléments qui appartiennent à un
> certain utilisateur. C'est pour faire une view qui regroupe les objets par
> nom d'utilisateurs. avec une URL du type :
>
(r'^lists/(?P<username>\w+)/$', 'app.views.user_list')
>
> Donc, c'est plutôt un filtre qui va ressembler un peu à ça :
>
Device.objects.filter(author__lastname__icontains='user')
>
> Ceci dit, je ne vois pas à quoi correspond "lastname" dans ce filtre.
> Dans mon modèle, je n'ai que le champs "author" qui est un ForeignKey sur
> les User
>
> J'ai trouvé un petit article (de 2006) qui décris comment faire ce que
> je cherche. Mais c'est pareil, je ne vois pas à quoi correspond owner et
> username dans le filtre.
>
todo_lists =
> TodoList.objects.filter(owner__username__exact=username)
>
> http://www.b-list.org/weblog/2006/nov/16/django-tips-get-most-out-generic-views/
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
ok. Je comprends mieux maintenant.
Effectivement, author, c'est mon champs rataché à la table user. Donc si je veux chercher par rapport au nom d'utilisateur, c'est
author__username...
Merci de ton aide.
Hors ligne