Django:如何在模型中使用get()方法
models.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') Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/site-packages/django/db/models/manager.py", line 131, in get return self.get_query_set().get(*args, **kwargs) File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 368, in get % (self.model._meta.object_name, num, kwargs)) MultipleObjectsReturned: get() returned more than one WorkDailyRecord -- it returned 12! Lookup parameters were {'ongoing_or_end': 'ing'}
我想只获得'数据'......
我该怎么办?
答案 0 :(得分:2)
要获取对象列表,请使用filter
方法。 get
应该返回单个对象或引发异常:
WorkDailyRecord.objects.filter(ongoing_or_end='ing')
答案 1 :(得分:0)
使用过滤器检索特定对象
all()返回的QuerySet描述数据库表中的所有对象。但是,通常,您只需要选择整个对象集的一部分。
要创建此类子集,请优化初始QuerySet,添加过滤条件。优化QuerySet的两种最常用方法是:
过滤器(** kwargs) 返回包含与给定查找参数匹配的对象的新QuerySet。 排除(** kwargs) 返回包含与给定查找参数不匹配的对象的新QuerySet。 查找参数(上述函数定义中的** kwargs)应采用下面的字段查找中描述的格式。
例如,
WorkDailyRecord.objects.filter(ongoing_or_end='ing')
使用默认的manager类,它与:
相同WorkDailyRecord.objects.all().filter(ongoing_or_end='ing')
答案 2 :(得分:0)
get()方法
导致多个对象或没有结果的查询都会导致异常,
请使用filter()代替