1
我需要一些指導。 我在觀看所有的Django視頻並閱讀關於模型和查詢的說明,但我對聯接缺乏一些瞭解。Django使用過濾器連接表的複雜查詢
以下是我的模型系列。我試圖寫一個查詢,返回一個與名爲「指揮官」的職位相關聯的成員名稱,並給出一個單位。總之,我試圖找到一個單位的指揮官。
但是,爲了達到那裏,我需要橋接成員 - > MemberUnit-> ClassPosition-> Position。
這是我有:
class Member(models.Model):
id = models.AutoField(primary_key=True)
member_id = models.CharField(unique=True, max_length=30)
first_name = models.CharField(max_length=30)
middle_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.CharField(max_length=50)
home_phone = PhoneNumberField(blank=True)
cell_number = PhoneNumberField(blank=True)
fax_number = PhoneNumberField(blank=True)
Cell_phone = models.CharField(max_length=20)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
User = models.ForeignKey(User, blank=True, null=True)
def __str__(self): # __unicode__ on Python 2
return self.first_name + " " + self.last_name
class Position(models.Model):
Position_name = models.CharField(max_length=30, unique=True)
Position_description = models.CharField(max_length=5000)
Max_count = models.IntegerField()
def __str__(self):
return self.Position_name
class ClassPosition(models.Model):
unit_class = models.ForeignKey(Class)
unit_position = models.ForeignKey(Position)
Date_effective = models.DateField()
def __str__(self):
return "Class: " + self.unit_class.class_name + "; Position: " + self.unit_position.Position_name
class MemberUnit(models.Model):
Member = models.ForeignKey(Member)
Unit = models.ForeignKey(Unit)
Position = models.ForeignKey(ClassPosition)
def __str__(self):
return self.Unit.Unit_name + " " + self.Position.unit_position.Position_name + " (" + self.Member.first_name + " " + self.Member.last_name + ")"
class Unit (models.Model):
HType = (
('HQ', 'IFT Headquarters'),
('JTF', 'Joint Task Force'),
('GEO', 'Geographic Theater'),
('SHIP', 'Federation Vessel Chapter')
)
Unit_name = models.CharField(max_length=30)
Hull_number = models.CharField(max_length=30)
Hull_type = models.CharField(max_length=4, choices=HType)
Parent_unit = models.ForeignKey("self", blank=True, null=True)
Class = models.ForeignKey(Class)
email = models.CharField(max_length=50, default='')
Member = models.ManyToManyField(Member, through='MemberUnit')
Address = models.CharField(max_length=500, default='')
City = models.CharField(max_length=50, default='')
State = models.CharField(max_length=2, default='')
Zip = models.IntegerField()
def __str__(self):
return self.Unit_name
class Class(models.Model):
class_type = models.CharField(max_length=30)
class_name = models.CharField(max_length=20, unique=True)
class_description = models.CharField(max_length=5000)
def __str__(self):
return self.class_name
如果我能得到這種查詢的一個例子,我相信我可以用類似的查詢卷,例如通過使用此。我將不勝感激任何幫助。
謝謝。
只是爲了澄清,你想看看哪些MemberUnit對象的Position_name是「指揮官」?編輯:或者,給定一個會員,你需要一個MemberUnit's的名單,他的ClassPosition的Position_name是「指揮官」? – user2719875
謝謝。請扭轉這一點。給定一個單位,我需要該單位的「指揮官」。非常感謝。 – arcee123
@ acree123給定一個Unit對象?因爲你沒有上傳「單元」模型。你能否更新你的文章以包含「單元」模型? – user2719875