如何在Django数据库中保存对象

时间:2019-02-02 13:21:30

标签: django python-3.x django-models

我正在django中创建模型,我需要一个字段来保存对象,例如,保存字符串django具有CharField,我具有返回我对象的api,我想创建一个模型来保存此对象。我检查了django模型字段,但没有找到任何保存对象的字段。

是否有任何字段可将对象保存在Django数据库中?

models.py

class UnusedResources(models.Model):
    field1 = models.CharField(max_length=20)
    field2 = models.CharField(max_length=70)
    field3 = models.CharField(max_length=70)
    saveobject = Field to save an object ?

2 个答案:

答案 0 :(得分:1)

在Django模型应该关联到在数据库中的表,以使得在模型中的每个字段实际上将在表中该模型的字段。

要实现您要执行的操作,您需要创建另一个模型,该模型将是您要存储的对象。

from django.db import models

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

class Album(models.Model):
    artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()

上面的代码摘自the documentation,您绝对应该阅读它以获得更多详细信息。

现在回到你的问题,本场artist的{​​{1}}模型里面,其实是你正在寻找(它实际上是另一个对象的引用,或外国的那种“对象”字段密钥)。

Album

如您所见,我创建了一个名为musician = Musician.objects.create( first_name="My", last_name="Name", instrument="guitar") album = Album.objects.create( name="Great Album", release_date=date, num_stars=5, artist=musician) 的{​​{1}}对象,并将其保存到数据库中。接着,我创建了一个Musician对象,这需要对象musician到它的Album字段中,并将其保存到数据库中。

在数据库中,我们的相册条目包含一个musician字段,其值是上面创建的artist对象的ID。

所以基本上,就像我们为数据库中的每个实体创建表一样,在Django中,我们使用模型,并且每个模型都对应一个特定的表。

答案 1 :(得分:0)

要将对象保存为模型字段,您需要先对其进行序列化,然后可以像这样保存它:

models.py:

class MyModel(models.Model):
   text = models.CharField(max_length=255)

class UnusedResources(models.Model):
    # other fields 
    obj = models.TextField()

views.py:

from django.core import serializers

def basic_func():            
    obj = MyModel.objects.create(text="some text...") # create object of MyModel.        
    s_obj = serializers.serialize("json", [obj]) # convert object to json format          
    obj2 = UnusedResources.objects.create(obj=s_obj) # save it to other model         
    print obj2.obj # accessing the model.

有关序列化程序的更多信息,请访问docs