测试模型时出现奇怪的错误

时间:2021-05-17 21:10:43

标签: django django-models

我有两个模型,我正在尝试编写一些测试,但仅在添加第二个测试存根时才会出现错误。

错误

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..E
======================================================================
ERROR: test_project_details (projects.tests.ModelTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/chriscummings/Desktop/avenue/projects/tests.py", line 27, in test_project_details
    project = Project.objects.get(pk=1)
  File "/Users/chriscummings/.local/share/virtualenvs/avenue-5F5WKxqz/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/chriscummings/.local/share/virtualenvs/avenue-5F5WKxqz/lib/python3.8/site-packages/django/db/models/query.py", line 435, in get
    raise self.model.DoesNotExist(
projects.models.Project.DoesNotExist: Project matching query does not exist.

----------------------------------------------------------------------
Ran 3 tests in 0.292s

测试

from django.test import TestCase
from .models import Project, Parcel


class ModelTest(TestCase):

    def setUp(self):
        self.project_details = {
            'code': 'P0023213',
            'state': 'SC',
            'county': 'Lexington/Richland',
            'description': 'A road widening.'
        }
        self.project = Project(**self.project_details)
        self.project.save()

        self.parcel_details = {
            'code': '00342-34-244',
            'owner': 'John Smith Inc.',
            'site_address': '123 Main St',
            'mailing_address': 'P.O. Box 42353'
        }
        self.parcel = Parcel(**self.parcel_details)
        self.parcel.save()

    def test_project_details(self):
        project = Project.objects.get(pk=1)

        self.assertEqual(project.code, self.project_details['code'])
        self.assertEqual(project.state, self.project_details['state'])
        self.assertEqual(project.county, self.project_details['county'])
        self.assertEqual(project.description, self.project_details['description'])
        print(project.description) # Prints fine if I comment out the next test.


    def test_parcel_details(self): # Commenting this out makes error go away.
        self.assertEqual(0,0)

模型

from django.db import models
from django.contrib.auth import get_user_model
from django.urls import reverse

class Project(models.Model):
    code = models.CharField(max_length=50)
    state = models.CharField(max_length=4)
    county = models.CharField(max_length=50)
    description = models.CharField(max_length=255)
    # users


class Parcel(models.Model):
    code = models.CharField(max_length=50)
    owner = models.CharField(max_length=255)
    site_address = models.CharField(max_length=255)
    mailing_address = models.CharField(max_length=255)
    project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)

1 个答案:

答案 0 :(得分:0)

尝试使用 self.project.id 或使用 id 代替 pk

或者使用带有必要字段的 Project.objects.create 方法