【发布时间】:2017-08-22 15:10:15
【问题描述】:
我的型号代码有问题:
class Person(models.Model):
name = models.CharField(max_length=20)
url = models.URLField()
card_id = models.CharField(max_length=20)
def __init__(self, name, card_id, url, *args, **kwargs):
super().__init__(*args, **kwargs)
self.name = name
self.card_id = card_id
self.url = url
def __str__(self):
return str({
'name': self.name,
'card_id': self.card_id,
'url': self.url
})
有测试代码:
class PersonTestCase(TestCase):
def setUp(self):
Person.objects.create(name="test",
card_id="123",
url="http://www.baidu.com")
def test_get(self):
p = Person.objects.get(name="test")
print(p)
测试函数'test_get'的打印是:
{'name': 1, 'card_id': 'test', 'url': '123'}
这是错误。
name 的值是表中id 列的数据,
card_id 的值是表中name 列的数据,
...
但如果我将函数 __init__ 更改为跟随:
def __init__(self, id=None, name=None, card_id=None, url=None, *args, **kwargs):
或者删除函数__init__,得到函数test_get的打印是:
{'name': 'test', 'card_id': '123', 'url': 'http://www.baidu.com'}
这是对的。
在某处,我使用Person(....)创建新实例,如果我删除__init__,则意味着我不能使用Person(...)创建新实例,
要不要改密码?
那么从表数据创建新实例的最佳方法是什么?
【问题讨论】: