Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AttributeError:';类别';对象没有属性';名称';-设置类_Python_Django_Testing_Model - Fatal编程技术网

Python AttributeError:';类别';对象没有属性';名称';-设置类

Python AttributeError:';类别';对象没有属性';名称';-设置类,python,django,testing,model,Python,Django,Testing,Model,我正在Django应用程序中为模型编写测试,但无法让它们运行。我已经尽了我所能去解决和寻找,但找不到解决办法 运行测试时收到的错误是AttributeError:“UserModelTest”对象没有属性“firstUser”,这表明我没有正确定义firstUser 下面是相关的代码位 测试.py from django.test import TestCase from .models import ContactForm from datetime import datetime, time

我正在Django应用程序中为模型编写测试,但无法让它们运行。我已经尽了我所能去解决和寻找,但找不到解决办法

运行测试时收到的错误是
AttributeError:“UserModelTest”对象没有属性“firstUser”
,这表明我没有正确定义firstUser

下面是相关的代码位

测试.py

from django.test import TestCase
from .models import ContactForm
from datetime import datetime, timedelta

class UserModelTest(TestCase):

    @classmethod
    def setUpClass(cls):
        cls.firstUser = ContactForm(
            email="first@user.com",
            name="first",
            timestamp=datetime.today() + timedelta(days=2)
        )
        cls.firstUser.save()

    def test_contactform_str_returns_email(self):
        self.assertEqual("first@user.com", str(self.firstUser))
from django.db import models
import datetime

class ContactForm(models.Model):
    name = models.CharField(max_length=150)
    email = models.EmailField(max_length=250)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email

    class Meta:
        ordering = ['-timestamp']
型号.py

from django.test import TestCase
from .models import ContactForm
from datetime import datetime, timedelta

class UserModelTest(TestCase):

    @classmethod
    def setUpClass(cls):
        cls.firstUser = ContactForm(
            email="first@user.com",
            name="first",
            timestamp=datetime.today() + timedelta(days=2)
        )
        cls.firstUser.save()

    def test_contactform_str_returns_email(self):
        self.assertEqual("first@user.com", str(self.firstUser))
from django.db import models
import datetime

class ContactForm(models.Model):
    name = models.CharField(max_length=150)
    email = models.EmailField(max_length=250)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email

    class Meta:
        ordering = ['-timestamp']

我使用的是Python版本3.5和Django版本1.10。

setUpClass
已经不推荐使用Django(我相信是从1.8开始)。为了现在就设置这个类,我需要使用
setUpTestData
。剩下的代码仍然有效<然后,代码>设置测试数据只在类中所有测试方法之前运行一次(而不是在每个测试之前运行一次)

i、 e.代码应为:

class UserModelTest(TestCase):

    @classmethod
    def setUpTestData(cls):
        cls.firstUser = ContactForm(
            email="first@user.com",
            name="first",
            timestamp=datetime.today() + timedelta(days=2)
        )
        cls.firstUser.save()

    def test_contactform_str_returns_email(self):
        self.assertEqual("first@user.com", str(self.firstUser))

可以找到有关setUpTestData的更多信息。

为什么将SetUpClass大写?请修复缩进。另外,您的问题是您将用户分配给类本身,而不是类的任何实例。(1)显示回溯(2)问题正文中的错误消息与问题标题中的错误消息不同已解决:对于Django 1.10,我应该使用
setUpTestData
,而不是
setUpClass
setUpClass
在我使用的Django的早期版本中使用。我不知道这已经被否决了。Django文档涵盖了
setUpTestData
。谢谢你的回复。