我的型号代码有问题:
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(...)
用来创建新实例,我要更改我的代码吗?
那么从表数据创建新实例的最佳方法是什么?
您根本不应该__init__
在模型上定义。基类 - 您通过调用它super
- 已经从 kwargs 设置了属性。删除该方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句