将对象实例分配给ModelFields(以及它们到数据库的神奇之旅)?

时间:2011-12-02 01:36:36

标签: django django-models

我正在阅读'Creating a custom model field'并且我遇到了一个问题,即对象实例占用数据库的过程。它提到:

  
    
      

重要的是要意识到Django字段类不是存储在模型属性中的字段。 模型属性包含普通的Python对象。您在模型中定义的字段类实际上在创建模型类时存储在Meta类中(这里完成的具体细节在这里并不重要)。

    
  

据我所知,在编写自定义字段时,我正在编写普通python对象之间的粘合代码,以及它如何保存到数据库中。 It goes on to talk about get_prep_value以及:

  
    
      

值参数是模型属性的当前值(字段没有引用其包含的模型,因此无法自行检索值)

    
  

据我了解,这就是说value是你试图表示的任何对象的实际实例?我写的时候(继续这个例子):

myhand = Hand('Ah', '9s', '8c', '2d')
my_model.custom_hand_field = myhand

我的get_prep_value方法是以myhand作为值调用的?

如果是这样,是对实际存储在Field类中某处的myhand的引用,还是该字段只是简单地在Hand和数据库值之间进行转换?

此外,它是如何通过`get_prep_value'将手的赋值转换为上面代码中的模型属性实际存储在DB中的(无论引用是否存储在Field类中)?


tl; dr 实例分配到模型属性与到达数据库之间发生了什么魔力,以及get_prep_value如何涉及?

0 个答案:

没有答案