django modèle de clé étrangère queryset la sélection des domaines connexes
Je suis en train de sélectionner à partir de la jointure des deux tables liées dans DJango comme indiqué ci-dessous. Mais je ne suis pas en mesure d'obtenir le champ de name
de l'autre table.
En SQL, nous pouvons écrire:
select person.phonenumber,membership.* from membership where person=name ;
Cette affiche tous les membership
champs avec phonenumber
, mais dans Django, il déclenche une erreur:
Ne peut pas résoudre mot-clé 'numéro de téléphone' dans le champ
J'ai même essayé avec select_related
mais pas d'utilisation. Suis-je en train de faire quelque chose de mal?
model.py:
from django.db import models
# Create your models here.
class Person(models.Model):
name = models.CharField(primary_key=True,max_length=128)
phonenumber = models.CharField(max_length=128)
city = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
>>> print m.query
SELECT `myapp_membership`.`id`, `myapp_membership`.`person_id`, `myapp_membership`.`date_joined`, `myapp_membership`.`invite_reason` FROM `myapp_membership` WHERE `myapp_membership`.`person_id` = x
>>> m=Membership.objects.filter(person__name='x').select_related()
>>> print m.query
SELECT `myapp_membership`.`id`, `myapp_membership`.`person_id`, `myapp_membership`.`date_joined`, `myapp_membership`.`invite_reason`, `myapp_person`.`name`, `myapp_person`.`phonenumber`, `myapp_person`.`city` FROM `myapp_membership` INNER JOIN `myapp_person` ON (`myapp_membership`.`person_id` = `myapp_person`.`name`) WHERE `myapp_membership`.`person_id` = x
>>> m=Membership.objects.filter(person__name='x').values('person','phonenumber').select_related()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/db/models/query.py", line 510, in values
return self._clone(klass=ValuesQuerySet, setup=True, _fields=fields)
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/db/models/query.py", line 766, in _clone
c._setup_query()
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/db/models/query.py", line 889, in _setup_query
self.query.add_fields(self.field_names, False)
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/db/models/sql/query.py", line 1537, in add_fields
"Choices are: %s" % (name, ", ".join(names)))
FieldError: Cannot resolve keyword 'phonenumber' into field. Choices are: date_joined, id, invite_reason, person
Vous devez vous connecter pour publier un commentaire.
phonenumber
est un champperson
, de sorte que vous devez passer dans lesperson__phonenumber
Membership
modèle avec FK àPerson
avec FK àCompany
avec un champ appeléaddress
. Vous avez probablement un peu différente du modèle, donc je vous recommande de vous poser une nouvelle question.Aussi, si vous voulez un queryset (donc ne pas utiliser des valeurs), vous pouvez le faire:
Malheureusement je ne sais pas comment faire pour qu'un champ de la table et toujours obtenir un queryset.