可以使用JSON数据在Django中添加新对象吗? [英] Can I use JSON data to add new objects in Django?
问题描述
[{记录:12345,
事件:初始任务完成,
TeamID:12345,
IndiviualID:null,
说明:只是一个描述,
日期:1/3/13 9:00},{记录:5555,
事件:完成不同任务,
TeamID:9999,
IndiviualID:null,
说明:只是另一个描述,
日期:1/13/13 6:00}]
说我有一个名为Member的模型。如何从此JSON数据中创建成员,而不必通过我的表单手动提交成员?希望这是有道理的。谢谢。
附录:我还必须澄清一点:Django应用上的对象有一些额外的变量,并丢弃其他变量,所以它是不完全匹配什么算法可以工作?
更新:
(与电子表格数据不同,当前实现是数据的2模型版本即每个成员都有一个名为Data的相关对象,它携带大部分变量,记录和日期是成员对象中唯一的变量,所有其他变量都是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 ='最近输入'
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 )
OK这个工作,但我不得不您的模型的一些变化,所以也许我不明白你想做什么。
模型与一个名称字段,我也添加到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 ',blank = True,null = True)
类数据(模型。模型)
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 = = true,null = True)
def save(self,* args,** kwargs):
member,_ = Member.objects.get_or_create(name = self。 name)
#可以在这里更新与其他字段有关的成员
self.member = member
super(Data,self).save(* args,** kwargs)
下面的代码将所有的json值放在Data的一个实例中,然后在Data的保存方法中,一个新的Member实例被创建未使用的值被简单地丢弃。
json = [{Record:12345,
Name:Joe ,
事件:初始任务完成,
TeamID:12345,
IndiviualID:,
描述:只是一个描述 ,
Date:1/3/13 9:00},{Record:5555,
Name:Jane,
Event:A不同的任务完成,
TeamID:9999,
IndiviualID:,
说明:只是另一个描述,
日期:1 / 13/13 6:00}]
json中的项目:
d = Data()
for k,v in item。 iteritems():
setattr(d,k.lower(),v)
d.save()
结果:
会员
1 Joe
2 Jane
数据
1 1初始任务完成只是一个描述
/ pre>
2 2完成一个不同的任务只是另一个描述
I have a set of known JSON data, extracted from an Excel file that I want to add to my Django application. The format looks like this:
[{" 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"}]
Lets say that I have a model called Member. How can I create members from this JSON data instead of having to submit it manually through my forms? Hopefully this makes sense. Thanks.
Addendum: I must also clarify that my object on the Django app has some additional variables, and discards other variables, so it is not an exact match. What algorithm would work?
UPDATE: (Different from the spreadsheet data the current implementation is a 2 model version of the data. Namely every Member has a related object called Data that carries most of the variables. Record and date are the only variables that are actually within the Member object. All others are part of the Data object)
This is my model arrangement.
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)
解决方案OK this works, but I have had to make a few changes to your model so maybe I don't understand what you are wanting to do.
Model with a name field that I also added to json so there was some data to put in and all fields can be left blank to accommodate incomplete data.
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)
Code below puts all the json values into an instance of Data then in the save method of Data, a new Member instance is created. Unused values are simply discarded.
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()
Results in:
Member
1 Joe 2 Jane
Data
1 1 Initial task completed Just a description 2 2 A different task completed Just another description
这篇关于可以使用JSON数据在Django中添加新对象吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!