我可以使用JSON数据在Django中添加新对象吗?
问题内容:
我有一组已知的JSON数据,这些数据是从要添加到Django应用程序的Excel文件中提取的。格式如下:
[{" Record": 12345,
"Event":" Initial task completed",
"TeamID": 12345,
"IndiviualID":null,
"Description":" Just a description",
"Date": "1/3/13 9:00"},{" Record": 5555,
"Event":" A different task completed",
"TeamID": 9999,
"IndiviualID":null,
"Description":" Just another description",
"Date": "1/13/13 6:00"}]
可以说我有一个称为Member的模型。如何从此JSON数据创建成员,而不必通过表单手动提交?希望这是有道理的。谢谢。
附录: 我还必须澄清,我在Django应用程序上的对象还有一些其他变量,并丢弃了其他变量,因此它不是完全匹配的。哪种算法有效?
更新:(
与电子表格数据不同,当前实现是该数据的2模型版本。即每个成员都有一个名为Data的相关对象,该对象带有大多数变量。Record和date是仅在Member对象中实际存在的变量(所有其他内容都是Data对象的一部分)
这是我的模特安排。
class Member(models.Model):
def __unicode__(self):
return self.record
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Entered recently?'
record = models.CharField(max_length=200)
pub_date = models.DateTimeField('date')
class Data(models.Model):
def __unicode__(self):
return self.dob
member = models.ForeignKey(Member)
dob = models.CharField(max_length=200)
event = models.CharField(max_length=200)
description = models.CharField(max_length=200)
gender = models.CharField(max_length=200)
问题答案:
好的,这行得通,但是我不得不对您的模型进行一些更改,所以也许我不明白您想要做什么。
我还向json添加了具有名称字段的模型,因此有一些数据可以放入,所有字段都可以留空以容纳不完整的数据。
class Member(models.Model):
name = models.CharField(max_length=30)
record = models.CharField(max_length=200, blank=True, null=True)
pub_date = models.DateTimeField('date', blank=True, null=True)
class Data(models.Model):
member = models.ForeignKey(Member)
dob = models.CharField(max_length=200, blank=True, null=True)
event = models.CharField(max_length=200, blank=True, null=True)
description = models.CharField(max_length=200, blank=True, null=True)
gender = models.CharField(max_length=200, blank=True, null=True)
def save(self, *args, **kwargs):
member, _ = Member.objects.get_or_create(name = self.name)
# can update member here with other fields that relate to them
self.member = member
super(Data, self).save(*args, **kwargs)
下面的代码将所有json值放入Data的实例中,然后在Data的save方法中创建一个新的Member实例。未使用的值将被简单丢弃。
json = [{" Record": 12345,
"Name": "Joe",
"Event":" Initial task completed",
"TeamID": 12345,
"IndiviualID":"",
"Description":" Just a description",
"Date": "1/3/13 9:00"},{" Record": 5555,
"Name": "Jane",
"Event":" A different task completed",
"TeamID": 9999,
"IndiviualID":"",
"Description":" Just another description",
"Date": "1/13/13 6:00"}]
for item in json:
d = Data()
for k,v in item.iteritems():
setattr(d, k.lower(), v)
d.save()
结果是:
会员
1 Joe
2 Jane
数据
1 1 Initial task completed Just a description
2 2 A different task completed Just another description