从表django得到所有不仅__str __(自我)

时间:2017-04-05 11:54:08

标签: python django django-models django-views django-queryset

models.py

class club(models.Model):
    name = models.CharField(max_length=30)
    city = models.CharField(max_length=30)
    premiere_leauge = models.BooleanField(default=False)

    def __str__(self):
    return self.name

Views.py

...
a = request.POST['club']
b = request.POST['city']

result = club.objects.all.get(name__exact=a, city__exact=b)
....

一切都很好,但我相信结果会让我回答:

def __str__(self):
    return self.name

无论如何,我想要相当于'SELECT * FROM APP_CLUB where name='something and city='something';所以我可以在django中进行进一步的操作,如:

if result[3] is True:
       do_something()

4 个答案:

答案 0 :(得分:3)

正如官方documentation

中所述
club.objects.filter(name='something')

它将返回与:

完全相同
'SELECT * FROM APP_CLUB where name='something';

示例:

clubs = club.objects.filter(name__exact='something')

for club in clubs:
    if club.premier_league:
        do_something()

如果你想只获得一个俱乐部,那就这样做:

club = club.objects.get(name='something')
premier_league_value_of_club = club.premier_league

答案 1 :(得分:1)

使用filter代替get

results = club.objects.filter(name__exact=a, city__exact=b)

然后,您可以迭代它以访问所有模型属性,如下所示

for result in results:
    print result.name, result.city, result.premier_league

此外,根据PEP-8,您应该将您的班级名称命名为标题Club,而不是小写club

答案 2 :(得分:1)

你几乎就在那里,我想你在这里错过了filter功能。您可以像这样使用它:

a = request.POST['club']
b = request.POST['city']

result = club.objects.filter(name__exact=a, city__exact=b)

它将返回一个包含实际数据库条目的查询集。

__str__(self)函数用于将查询集条目转换为字符串,无论是用字符串转换还是打印它。

然后关于这个:

if result[3] is True:
   do_something()

我不能很好地理解你的意思,但如果3是数据库中条目的id,那么你可以这样做:

if result.get(id=3).premiere_leauge:
    do_something()

但您可能想要先检查具有id的条目是否存在以避免错误:

if result.filter(id=3).exists() and result.get(id=3).premiere_leauge:
    do_something()

答案 3 :(得分:0)

您应该修改您的查询,如下所示

result = club.objects.all.filter(name__exact=a, city__exact=b)

祝你好运!!