可以使用JSON数据在Django中添加新对象吗? [英] Can I use JSON data to add new objects in Django?

查看:230
本文介绍了可以使用JSON数据在Django中添加新对象吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一组已知的JSON数据,从Excel文件中提取,我想添加到我的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初始任务完成只是一个描述
2 2完成一个不同的任务只是另一个描述
/ pre>

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆