【问题标题】:Django: How to use get() method in modelDjango:如何在模型中使用 get() 方法
【发布时间】:2013-01-12 16:02:52
【问题描述】:

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')
回溯(最近一次通话最后):
  文件“”,第 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”数据...

我该怎么办?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      使用过滤器检索特定对象

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

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

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

      例如,

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

      使用默认管理器类,同:

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

      【讨论】:

        【解决方案3】:

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

        请使用 filter() 代替

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-18
          • 2020-10-29
          • 1970-01-01
          • 1970-01-01
          • 2020-04-10
          • 2013-01-12
          • 1970-01-01
          • 2021-05-22
          相关资源
          最近更新 更多