Django单元测试“不存在匹配查询”

问题描述

我正在尝试对模型进行单元测试,但不断收到“捐赠匹配查询不存在”,其回溯指向test_charity函数的第一行。我尝试使用charity='aclu'而不是ID来获取对象,但这并不能解决问题。

from django.test import TestCase
from .models import Donation


class DonateModelTest(TestCase):

    def init_data(self):
        #print("got here")
        x = Donation.objects.create(charity='aclu',money_given=15)
        # print(x.id)

    def test_charity(self):
        donation = Donation.objects.get(id=1)
        field_label = donation._meta.get_field('charity').verbose_name
        self.assertEquals(field_label,'charity')

我的模型。py:

from django.db import models

class Donation(models.Model):
    DONATE_CHOICES = [
        ('aclu','American Civil Liberties Union'),('blm','Black Lives Matter'),('msf','Medecins Sans Frontieres (Doctors Without Borders)')
    ]

    charity = models.CharField(
        max_length=4,choices=DONATE_CHOICES,default='aclu'
    )

    money_given = models.IntegerField(default=0)

解决方法

您使用setUp设置了数据。此外,您应该保存主键,并使用它,因为数据库可以使用任何主键。因此,根据数据库后端和测试用例的顺序,它可以创建具有不同主键的对象:

class DonateModelTest(TestCase):

    def setUp(self):
        self.pk = Donation.objects.create(charity='aclu',money_given=15).pk

    def test_charity(self):
        donation = Donation.objects.get(id=self.pk)
        field_label = donation._meta.get_field('charity').verbose_name
        self.assertEquals(field_label,'charity')

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...