天天看點

django ForeignKey的使用

ForeignKey,ManyToManyField與OneToOneField分别在Model中定義多對一,多對多,一對一關系。

ForeignKey

加入資料庫中要建立兩張表,userlist和UserTpye。

Userlist表的字段有

1

<code>[</code><code>'username'</code><code>,</code><code>'password'</code><code>,</code><code>'Gender'</code><code>,</code><code>'Age'</code><code>,</code><code>'memo'</code><code>,</code><code>'TypeID'</code><code>]</code>

UserType表的字段有

<code>['name]</code>

這裡的name值隻有三個,管理者,超級管理者,普通使用者。

現在希望Userlist和UserType兩張表關聯起來,即Userlist中有一個TypeID的字段,其值為UserType表的限定的三個值。也就是說Userlist中TypeID隻能為管理者、超級管理者或者普通使用者

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<code>#coding:utf8</code>

<code>from</code> <code>django.db </code><code>import</code> <code>models</code>

<code>class</code> <code>Userlist(models.Model):</code>

<code>    </code><code>username </code><code>=</code> <code>models.CharField(max_length</code><code>=</code><code>50</code><code>)</code>

<code>    </code><code>password </code><code>=</code> <code>models.CharField(max_length</code><code>=</code><code>50</code><code>)</code>

<code>    </code><code>male </code><code>=</code> <code>{</code>

<code>        </code><code>(</code><code>'man'</code><code>, u</code><code>'男'</code><code>),</code>

<code>        </code><code>(</code><code>'woman'</code><code>, u</code><code>'女'</code><code>),</code>

<code>    </code><code>}</code>

<code>    </code><code>Gender </code><code>=</code> <code>models.CharField(max_length</code><code>=</code><code>50</code><code>,blank</code><code>=</code><code>True</code><code>,</code>

<code>                              </code><code>choices</code><code>=</code><code>male)</code>

<code>    </code><code>Age </code><code>=</code> <code>models.IntegerField(default </code><code>=</code> <code>'20'</code><code>)</code>

<code>    </code><code>memo </code><code>=</code> <code>models.TextField(default </code><code>=</code> <code>'xxx'</code><code>)</code>

<code>    </code><code>#CreateDate = models.DateTimeField(default='2012-1-2 12:00')</code>

<code>    </code><code>TypeID </code><code>=</code> <code>models.ForeignKey(</code><code>'UserType'</code><code>)</code>

<code>class</code> <code>UserType(models.Model):</code>

<code>    </code><code>name </code><code>=</code> <code>models.CharField(max_length</code><code>=</code><code>50</code><code>)</code>

<code>    </code><code>def</code> <code>__unicode__(</code><code>self</code><code>):</code>

<code>        </code><code>return</code> <code>self</code><code>.name</code>

這裡UserType 傳回的是name資訊,是為了在背景管理界面中,在編輯Userlist表時,UserType字段顯示UserType對象的name屬性,即“管理者,超級管理者,普通使用者”

<a href="https://s5.51cto.com/wyfs02/M01/8E/0A/wKioL1iz-SbgQTH5AADC7cjPul4948.png" target="_blank"></a>

admin.py代碼:

<code>from</code> <code>django.contrib </code><code>import</code> <code>admin</code>

<code>from</code> <code>learn.models </code><code>import</code> <code>*</code>

<code># Register your models here.</code>

<code>class</code> <code>UserlistAdmin(admin.ModelAdmin):</code>

<code>    </code><code>list_display </code><code>=</code> <code>[</code><code>'username'</code><code>,</code><code>'password'</code><code>,</code><code>'Gender'</code><code>,</code><code>'Age'</code><code>,</code><code>'memo'</code><code>,</code><code>'TypeID'</code><code>]</code>

<code>admin.site.register(Userlist,UserlistAdmin)</code>

<code>class</code> <code>UserTypeAdmin(admin.ModelAdmin):</code>

<code>    </code><code>list_display </code><code>=</code> <code>[</code><code>'name'</code><code>,</code><code>'id'</code><code>]</code>

<code>admin.site.register(UserType,UserTypeAdmin)</code>

這裡UserType表顯示了id字段,預設每張表都有id字段,并且是自增的。

<a href="https://s4.51cto.com/wyfs02/M00/8E/0A/wKioL1iz-fyzOZ6rAACYg2vShlo461.png" target="_blank"></a>

本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1901751,如需轉載請自行聯系原作者