Aşağıda gösterildiği gibi DJango'daki ilgili iki tablodan birleşimden seçim yapmaya çalışıyorum. Ancak diğer tablonun name
alanını alamıyorum.django model yabancı anahtar queryset ilgili alanları seç
SQL biz yazabiliriz:
select person.phonenumber,membership.* from membership where person=name ;
Bu phonenumber
birlikte tüm membership
alanları görüntüler, ancak Django hatayı atar:
Cannot resolve keyword 'phonenumber' into field
Hatta select_related
ama hiçbir kullanımı ile çalıştık . Yanlış bir şey yapıyorum?
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
haaa, person__'yi ilişki olarak eklemeyi unuttum, teşekkürler ton yuji – sush
@Yuji 'Tomita' Tomita Değerlere bir tane daha katılmalı mıyım? Örneğin, Kişi tablosu, bulmak istediğim adrese Şirket tablosuna yabancı anahtar içeriyorsa. Değerleri eklemem gerektiğini varsaydım: 'person__company__address'. ama bu benim için çalışmıyor .. Ne yapmalıyım biliyor musunuz? – GileBrt
@GileBrt, "Üyelik" isimli bir "Üyelik" modelinin FK ile "Kişi" nin FK ile "Şirket" alanına "adres" adlı bir alana sahip olsaydı işe yarayacaktı. Muhtemelen biraz farklı bir modeliniz var, bu yüzden yeni bir soru göndermenizi tavsiye ederim. –