簡體   English   中英

獲取Django中查詢對象的外鍵值

[英]Get foreign key value for queried object in Django

我有一個搜索查詢,如下所示:

ct = Classified.objects.filter(
    Q(name__icontains=q) |
    Q(subcategory__parent__type__icontains=q) |
    Q(address__area__icontains=q) |
    Q(subcategory__name__icontains=q)
).filter(active__icontains='yes').filter(address__city__name__exact=cit)

對於分類模型:

class Classified(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256)
    contact_person = models.CharField(max_length=300)
    email = models.CharField(max_length=100)
    address = models.ForeignKey(Address)
    subcategory = models.ForeignKey(Subcategory)
    phone_number = models.BigIntegerField(max_length=20, default=0)
    image = models.ImageField(blank=True, upload_to='dynamic/img/')
    NO = 'NO'
    YES = 'YES'
    APPROVAL = ((NO, 'no'), (YES, 'yes'))
    active = models.CharField(choices=APPROVAL, default=NO, max_length=3)
    verified = models.CharField(choices=APPROVAL, default=NO, max_length=3)

    def __unicode__(self):
        return self.name

子類別模型為:

class Subcategory(models.Model):
    id = models.AutoField(primary_key=True)
    parent = models.ForeignKey(Categories, null=True, blank=True, default=1)
    name = models.CharField(max_length=300)

    def __unicode__(self):
        return self.name

類別表不在這里,所以我沒有包括它。

在視圖中,我將顯示一個過濾器下拉列表,該下拉列表應顯示ct找到的結果的所有唯一子類別的列表。

我嘗試了兩種解決方案:

getsubcat = Classified.objects.filter(
    Q(name__icontains=q) | 
    Q(subcategory__parent__type__icontains=q) | 
    Q(address__area__icontains=q) | 
    Q(subcategory__name__icontains=q)
).filter(active__icontains='yes').\
    filter(address__city__name__exact=cit).values('subcategory')

這給了我所有子類別的列表: {'subcategory': 1},{'subcategory':2} 但這不是我所需要的,因為我需要ct結果的確切Subcategory.name

我嘗試了模板中的第二種方法:

{% for subcat in result %}
   {{ subcat.subcategory.name }}
{% endfor %}

result從views.py作為{ 'result': ct, }傳遞。 但是,這重復了相同的子類別n次,其中nresult

如果需要子類別,則應查詢子類別。

Subcategory.objects.filter(classified__in=ct)

我認為您可以使用values_list僅返回subcategory__name

嘗試類似

subcategories = ct.values_list('subcategory__name', flat=True).distinct()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM