0

Django:如何在模型中使用 get() 方法

模型.py

class WorkDailyRecord(models.Model):
    user = models.ForeignKey(User)
    date = models.DateTimeField(auto_now_add=True)
    contents = models.TextField()
    check_user = models.ManyToManyField(
                User,
                related_name='checked_user_record_set',
            )
    target_user = models.ManyToManyField(
                User,
                related_name='target_user_record_set',
            )

    ONGOING_OR_END =(
                ('ing', 'ing'),
                ('end', 'end'),
            )


    ongoing_or_end = models.CharField(
                max_length=3,
                choices=ONGOING_OR_END,
                default='ing',
            )
>>>WorkDailyRecord.objects.get(ongoing_or_end='ing')
回溯(最近一次通话最后):
  文件“”,第 1 行,在
  文件“/usr/lib/python2.7/site-packages/django/db/models/manager.py”,第 131 行,在 get
    返回 self.get_query_set().get(*args, **kwargs)
  文件“/usr/lib/python2.7/site-packages/django/db/models/query.py”,第 368 行,在 get
    % (self.model._meta.object_name, num, kwargs))
MultipleObjectsReturned:get() 返回了多个 WorkDailyRecord —— 它返回了 12 个!查找参数为 {'ongoing_or_end': 'ing'}

我只想得到'ing'数据......

我该怎么办?

4

3 回答 3

2

要获取对象列表,请使用filter方法。get应该返回单个对象或引发异常:

WorkDailyRecord.objects.filter(ongoing_or_end='ing')
于 2013-01-30T20:23:00.643 回答
0

使用过滤器检索特定对象

all() 返回的 QuerySet 描述了数据库表中的所有对象。但是,通常您只需要选择完整对象集的一个子集。

要创建这样的子集,您需要优化初始 QuerySet,添加过滤条件。优化 QuerySet 的两种最常见的方法是:

filter(**kwargs) 返回一个新的 QuerySet,其中包含与给定查找参数匹配的对象。exclude(**kwargs) 返回一个新的 QuerySet,其中包含与给定查找参数不匹配的对象。查找参数(上述函数定义中的**kwargs)应采用下面字段查找中描述的格式。

例如,

WorkDailyRecord.objects.filter(ongoing_or_end='ing')

使用默认管理器类,它与以下内容相同:

WorkDailyRecord.objects.all().filter(ongoing_or_end='ing')
于 2017-12-27T06:54:49.067 回答
0

get() 方法
查询导致多个对象或没有结果都将导致异常,

请改用 filter()

于 2017-12-27T08:15:40.167 回答