Django,如何避免'匹配查询不存在'

时间:2018-01-06 07:26:57

标签: django

views.py

try:
    testmodel2 = TestModel_2.objects.get(description='a')
except TestModel_2.DoesNotExist:
    testmodel2 = None

models.py

@python_2_unicode_compatible
class TestModel_2(models.Model):

    description = models.CharField(max_length=34)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "TestModel %s" % self.description

问题: 为什么我设置了DoesNotExist,发生了myapp.models.DoesNotExist: TestModel_2 matching query does not exist.

修改

Internal Server Error: /accounts/test2/
Traceback (most recent call last):
  File "D:\pythonDev\interpreters\interpreter1\lib\site-packages\django\db\models\fields\related_descriptors.py", line 170, in __get__
    rel_obj = getattr(instance, self.cache_name)
AttributeError: 'TestModelLog_2' object has no attribute '_test_foreignkey_2_cache'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\pythonDev\interpreters\interpreter1\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
    response = get_response(request)
  File "D:\pythonDev\interpreters\interpreter1\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "D:\pythonDev\interpreters\interpreter1\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\pythonDev\project\logintest\renoauth\views.py", line 56, in test2
    if testmodel_2_log.test_foreignkey_2 is None:
  File "D:\pythonDev\interpreters\interpreter1\lib\site-packages\django\db\models\fields\related_descriptors.py", line 179, in __get__
    rel_obj = qs.get()
  File "D:\pythonDev\interpreters\interpreter1\lib\site-packages\django\db\models\query.py", line 385, in get
    self.model._meta.object_name
renoauth.models.DoesNotExist: TestModel_2 matching query does not exist.
[06/Jan/2018 16:20:24] "POST /accounts/test2/ HTTP/1.1" 500 15678

相关模型

@python_2_unicode_compatible
class TestModelLog_2(models.Model):
    description = models.CharField(max_length=34)
    test_foreignkey = models.ForeignKey(TestModel_2, related_name='test_foreignkey_1', null=True, blank=True, on_delete=models.DO_NOTHING)
    test_foreignkey_2 = models.ForeignKey(TestModel_2, related_name='test_foreignkey_2', null=True, blank=True, on_delete=models.DO_NOTHING)

1 个答案:

答案 0 :(得分:1)

query = TestModel_2.objects.filter(description='a')

if not query.exists():
    return None
return query