首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表django获得所有信息,而不仅仅是__str__(self)

从表django获得所有信息,而不仅仅是__str__(self)
EN

Stack Overflow用户
提问于 2017-04-05 11:54:08
回答 4查看 1.9K关注 0票数 0

models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
...
a = request.POST['club']
b = request.POST['city']

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

一切都很好,但是我相信结果会回报我:

代码语言:javascript
复制
def __str__(self):
    return self.name

不管怎么样,我想要一个等价的'SELECT * FROM APP_CLUB where name='something and city='something';,这样我就可以在django中做进一步的操作了,比如:

代码语言:javascript
复制
if result[3] is True:
       do_something()
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-05 11:59:53

如官方文档中所建议的那样

代码语言:javascript
复制
club.objects.filter(name='something')

它的返回与以下内容完全相同:

代码语言:javascript
复制
'SELECT * FROM APP_CLUB where name='something';

示例:

代码语言:javascript
复制
clubs = club.objects.filter(name__exact='something')

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

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

代码语言:javascript
复制
club = club.objects.get(name='something')
premier_league_value_of_club = club.premier_league
票数 3
EN

Stack Overflow用户

发布于 2017-04-05 11:58:43

使用filter而不是get

代码语言:javascript
复制
results = club.objects.filter(name__exact=a, city__exact=b)

然后,您可以遍历它来访问所有模型属性,如下所示

代码语言:javascript
复制
for result in results:
    print result.name, result.city, result.premier_league

此外,根据PEP-8,您应该将类名命名为理想的Club,而不是小写的club

票数 1
EN

Stack Overflow用户

发布于 2017-04-05 12:05:24

你快到了,我想你错过了过滤器函数。你可以这样使用它:

代码语言:javascript
复制
a = request.POST['club']
b = request.POST['city']

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

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

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

然后关于这个:

代码语言:javascript
复制
if result[3] is True:
   do_something()

我不太明白您的意思,但是如果3是数据库中条目的id,那么您可以这样做:

代码语言:javascript
复制
if result.get(id=3).premiere_leauge:
    do_something()

但是,您可能需要首先检查id条目是否存在,以避免错误:

代码语言:javascript
复制
if result.filter(id=3).exists() and result.get(id=3).premiere_leauge:
    do_something()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43230444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档