如何过滤Django模型中的对象?

2024-09-26 18:07:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个模型来存储数据。这样地。在

class Country(models.Model):

    Countryname = models.CharField(max_length=200)

    def __unicode__(self):
        return self.Countryname


class CountryDiseases(models.Model):

    country = models.ForeignKey(Country,on_delete=models.CASCADE)
    pmid = models.CharField(default= 'No Data',max_length=254)
    serogroup = models.CharField(default= 'No Data', max_length=254)
    serotype = models.CharField(default= 'No Data', max_length=254)
    biotype = models.CharField(default= 'No Data',max_length=254)
    collection_year = models.CharField(default= 'No Data',max_length=254)
    NoOfStrains = models.CharField(default= 'No Data', max_length=254)


    def __unicode__(self):
        return self.NoOfStrains

呈现数据的url如下所示:

^{pr2}$

简而言之,我有一个模板,其中包含一个带有超链接的国家列表, 当有人点击某个国家时,它应该产生一个列表,列出与特定国家相关的所有数据,比如给定的网址

http://127.0.0.1:8000/DATAPLO/india 

其中“India”关键字将传递到给定的视图中,view将通过filter方法提取所有对象:

C_Details = CountryDiseases.objects.filter(country__country=pk)

这样提取和呈现数据的视图:

def County_Details(request,pk):
     C_Details = CountryDiseases.objects.filter(country__country=pk)
    #C_Details = CountryDiseases.objects.filter(country='india')
    return render(request, 'DATAPLO/Country_Details.html', {'C_Details': C_Details})

它生成的urld如下所示:

http://127.0.0.1:8000/DATAPLO/india 
http://127.0.0.1:8000/DATAPLO/USA 
http://127.0.0.1:8000/DATAPLO/canada 

但数据尚未提取。在


Tags: 数据noselfhttpdefaultdatamodelsdetails
1条回答
网友
1楼 · 发布于 2024-09-26 18:07:00

我可能会更改参数的名称(在视图和网址.py)对于类似于country_name,as country.pk通常配置为返回与country.id相同的值。为了惯例起见,我将把country上的name字段的名称改为name,而不是{}。在

class Country(models.Model):

    name = models.CharField(max_length=200)

    def __unicode__(self):
        return self.name

然后在您看来,您可以通过相关国家/地区模型上的name字段查找CountryDiseases对象:

^{pr2}$

或者,如果您希望首先查找国家/地区以及详细信息,因为您可能在国家/地区模型中存储了其他信息,则可以更改CountryDiseases查找以直接引用国家/地区对象:

def County_Details(request, country_name):
    country = Country.objects.get(name=country_name)
    C_Details = CountryDiseases.objects.filter(country=country)
    return render(request, 'DATAPLO/Country_Details.html', {'C_Details': C_Details})

PS如果资本化将成为一个问题,例如“印度”与“印度”,您可以使用查找:

  • .filter(country__name__iexact=country_name)(在第一个代码示例中为)或
  • .get(name__iexact=country_name)(在第二个例子中,但是您还应该确保在保存对象时不会发生冲突,因为您正在进行.get()查询)。在

相关问题 更多 >

    热门问题