2015-07-10 91 views
0

我已经定义的模型如下创建JSON夹具:的Django模型

model.py

class User(models.Model): 
    user_id = models.IntegerField() 
    user_name = models.CharField(max_length=40) 
    email = models.EmailField() 
    city = models.CharField(max_length=40) 
    class Meta: 
     ordering = ['user_id'] 
     verbose_name = 'User MetaData' 
     verbose_name_plural = 'Users MetaData' 
    def __unicode__(self): 
     return str(self.user_id) 

class VideoData(models.Model): 
    video = models.CharField(max_length=40) 
    time = models.IntegerField() 
    user = models.ForeignKey(User) 
    class Meta: 
     verbose_name = 'User_Video MetaData' 
     verbose_name_plural = 'Users_Video MetaData' 

现在我想从JSON文件 “loaddata” 命令来更新模型。我有一个JSON文件在下面的格式:

{ 
    "fields":{ 
    "user id":12026, 
    "user name":"Paul Graham", 
    "email":"[email protected]", 
    "city":"China", 
    "VIdeoData":[ 
     { 
      "video":"Livetube", 
      "time":0 
     }, 
     { 
      "video":"Leexo", 
      "time":22 
     } 
    ] 
    }, 
    "pk":1, 
    "model":"graph.user" 
}, 

当我用“manage.py loaddata”命令,我得到

error : "User has no field named u'VideoData'" 

如何更新的领域?

+1

这是正确的,因为'VideoData'是不是在用户模式的字段。通常,模型不遵循封装,但通过[关系](https://docs.djangoproject.com/en/dev/topics/db/models/)互相引用(即一对一,一对一,许多,多对多) – Pynchia

回答

1

我建议更新您的模型,以使它们彼此相关。

例如,到User模型添加一个多到多的关系,有可能与through table保持这样的关系的属性(例如,当它被租用/由用户观看)

class User(models.Model): 
    user_id = models.IntegerField() 

    videos = models.ManyToManyField(VideoData, through='VideoRenting', through_fields=('user', 'videodata')) 

    user_name = models.CharField(max_length=40) 
    email = models.EmailField() 
    city = models.CharField(max_length=40) 
    class Meta: 
     ordering = ['user_id'] 
     verbose_name = 'User MetaData' 
     verbose_name_plural = 'Users MetaData' 
    def __unicode__(self): 
     return str(self.user_id) 

class VideoRenting(models.Model): 
    user = models.ForeignKey(User) 
    videodata = models.ForeignKey(VideoData) 
    rented_at = models.DateTimeField() 

有关更多详细信息,请参阅here

很明显,您可以在VideoData类中插入多对多关系,而不是在User类中。

在数据库中创建对象,然后将它们放到JSON与django-admin-dumpdata