Python和Django的新手并尝试导入.json文件。 JSON文件的结构使得每个根级对象都有一个嵌套对象。
例如,JSON的结构为:
[
{
"model": "testapp.Person",
"pk": 1,
"fields": {
"firstName":"Jane",
"lastname":"Doe",
"haircolor":"black",
"mailingaddress": {
"streetaddress": "1214 Example St.",
"city": "Silver Spring",
"state": "MD",
"zipcode": "20910"
}
}
}
]
python模型定义如下:
from django.db import models
# Create your models here.
class address(models.Model):
streetaddress = models.CharField(max_length=200)
city = models.CharField(max_length=200)
state = models.CharField(max_length=5)
zipcode = models.CharField(max_length=10)
def __init__(self, streetaddress, city, state, zipcode):
self.streetaddress = streetaddress
self.city = city
self.state = state
self.zipcode = zipcode
class Person(models.Model):
firstName = models.CharField(max_length=200)
lastname = models.CharField(max_length=200)
haircolor = models.CharField(max_length=200)
mailingaddress = address(streetaddress, city, state, zipcode)
运行python manage.py loaddata
时出错,因为很明显,init参数streetaddress, city, state, zipcode
在该上下文中不存在。
如何构建模型以动态生成其他对象?
答案 0 :(得分:0)
根据您的模型结构,您必须首先创建地址记录。这将是您用来保存到您创建的 Person 对象的记录。所以,你的装置看起来像这样
[
{
"model": "app_name.address",
"pk": 1,
"fields": {
"streetaddress": "1214 Example St.",
"city": "Silver Spring",
"state": "MD",
"zipcode": "20910"
}
},
{
"model": "app_name.person",
"pk": 1,
"fields": {
"firstName":"Jane",
"lastname":"Doe",
"haircolor":"black",
"mailingaddress":1
}
},
]
请注意,mailingaddress
有一个“1”作为表示记录主键的值,这就是您所需要的。
只需向 JSON 数组对象添加另一个元素,您就可以将更多人添加到同一地址。
另一种确保您的 JSON 固定文件具有正确结构的方法是添加一些虚拟数据(一个记录应该这样做),然后将该数据转储到一个文件(例如 dump.json)中,然后将该文件编辑为满足您的需求。
django documentation 也很不错,因此我建议您也查看它以获得更多指导。
附注:
在这种情况下,您也不需要 __init__
构造函数