首页 文章

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

提问于
浏览
0

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'}

我想只获得“数据”......

我该怎么办?

3 回答

  • 2

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

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

    使用过滤器检索特定对象

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

    要创建此类子集,请优化初始QuerySet,添加过滤条件 . 优化QuerySet的两种最常用方法是:

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

    例如,

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

    使用默认的manager类,它与以下内容相同:

    WorkDailyRecord.objects.all().filter(ongoing_or_end='ing')
    
  • 0

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

    请改用filter()

相关问题