django中查询的简单反转

时间:2012-08-16 17:35:57

标签: django django-models django-database

我正在尝试将某个特定帖子存在的国家/地区,以便我只能显示这些国家/地区。这样做。我有以下代码。

型号:

class Country(models.Model):
    name=models.CharField(max_length=100)
    iso_code_2=models.CharField(max_length=4)
    iso_code_3=models.CharField(max_length=4)
    def __unicode__(self):
        return self.name
    def get_countries_with_jobs(self):
        countries=self.objects.filter(id__in=Post.country)
        return countries


class Category(models.Model):
    name=models.CharField(max_length=100)
    title=models.CharField(max_length=100)
    meta_keywords=models.CharField(max_length=100)
    meta_description=models.CharField(max_length=100)
    sort_order=models.IntegerField()
    def __unicode__(self):
        return self.name

class City(models.Model):
    name=models.CharField(max_length=100)
    title=models.CharField(max_length=100)
    meta_keywords=models.CharField(max_length=100)
    meta_description=models.CharField(max_length=100)
    sort_order=models.IntegerField()
    country=models.ForeignKey(Country)
    def __unicode__(self):
        return self.title

class Post(models.Model):
    user=models.ForeignKey(User)
    title=models.CharField(max_length=100)
    publish_date=models.DateField()
    active=models.BooleanField()
    country=models.ForeignKey(Country)
    city=ChainedForeignKey(City,chained_field="country",chained_model_field="country" )
    category=models.ForeignKey(Category)
    description=models.TextField()
    added_by=models.CharField(max_length=70)
    def __unicode__(self):
        return self.title

这里get_countries_with_jobs方法有代码试图查询并获取帖子存在的国家/地区。通常是某个帖子的一个访问国家/地区,但在这种情况下,我需要获取帖子存在的国家/地区。这里调用此方法时出错,所以我尝试在view方法中编写此代码,如下所示。

def list(request,template_name='list_posts.html'):
     countries=Country.objects.filter(id__in=Posts.country)
     return render_to_response(template_name,locals(),context_instance=RequestContext(request))

1 个答案:

答案 0 :(得分:1)

你的问题很难理解,所以我会看几个解释:

  1. 您希望获得特定帖子的国家/地区:

    countries = Country.objects.filter(post=post_instance)
    
  2. 您希望获得所有发布帖子的国家/地区:

    countries = Country.objects.filter(post__isnull=False)
    

    同样,如果您希望的国家/地区有与之关联的帖子:

    countries = Country.objects.filter(post__isnull=True)