0
我對Django很陌生,在從現有表中抽取一些麻煩。我試圖從多個連接表中的列中提取數據。我找到了解決方案,但感覺有點像作弊,想知道我的方法是否被認爲是正確的。從Django中的多個表中提取數據
class Sig(models.Model):
sig_id = models.IntegerField(primary_key=True)
parent = models.ForeignKey('self')
state = models.CharField(max_length=2, db_column='state')
release_id = models.SmallIntegerField(choices=releaseChoices)
name = models.CharField(max_length=255)
address = models.CharField(max_length=255, blank=True)
city = models.CharField(max_length=255, blank=True)
zip = models.CharField(max_length=10, blank=True)
phone1 = models.CharField(max_length=255, blank=True)
fax = models.CharField(max_length=255, blank=True)
email = models.EmailField(max_length=255, blank=True)
url = models.URLField(max_length=255, blank=True)
description = models.TextField(blank=True)
contactname = models.CharField(max_length=255, blank=True)
phone2 = models.CharField(max_length=255, blank=True)
ratinggroup = models.BooleanField()
state_id = models.ForeignKey(State, db_column='state_id')
usesigrating = models.BooleanField()
major = models.BooleanField()
class Meta:
db_table = u'sig'
class SigCategory(models.Model):
sig_category_id = models.IntegerField(primary_key=True)
sig = models.ForeignKey(Sig, related_name='sigcategory')
category = models.ForeignKey(Category)
class Meta:
db_table = u'sig_category'
class Category(models.Model):
category_id = models.SmallIntegerField(primary_key=True)
name = models.CharField(max_length=255)
release_id = models.SmallIntegerField()
class Meta:
db_table = u'category'
然後,這是我的解決方案,它的工作原理,但並不完全感覺不對:
sigs = Sig.objects.only('sig_id', 'name').extra(
select = {
'category': 'category.name',
},
).filter(
sigcategory__category__category_id = categoryId,
state_id = stateId
).order_by('sigcategory__category__name', 'name')
現在,因爲在過濾器中的項目()加入sigcategory和分類模型,我能通過使用extra()將category.name拉出來。這是做這件事的正確方法嗎?如果我在filter()中沒有引用並且沒有發生連接,該怎麼辦?
然而,如果我嘗試跳過這樣的關係:sigs [0]。 sigcategory.category,我只是以這個異常結束:'RelatedManager'對象ha s沒有屬性'category' – 2010-07-26 15:49:29
這是因爲可以有許多sigcategories。這不是一個實例,而是一個經理。改爲使用'sigs [0] .sigcategory.all()[0] .category'。 – Wolph 2010-07-26 16:01:51
我簡直不敢相信我逃脫了。多謝你們。 – 2010-07-26 16:04:31