Django的ORM主外鍵約束實現


創建兩個數據表類,並實現主外鍵關聯(出版社與圖書 一對多關系)

1 #創建一個出版社類
2 class Press(models.Model): 3     id =models.AutoField(primary_key=True), #自增型主鍵
4     name=models.CharField(max_length=30,null=False,unique=True) #varchar 30 非空且唯一
5 
6 class Book(models.Model): 7     bid=models.AutoField(primary_key=True) 8     bname=models.CharField(max_length=48,null=False,unique=True) 9     press=models.ForeignKey(to='Press')    #外鍵關系 是一個press對象

查詢有主外鍵關系的book表時,可以直接調press對象下的name屬性 也可以調id

 1 {% for foo in book %}  2             <tr>
 3               <td>{{ foo.bid }}</td>
 4               <td>{{ foo.bname }}</td>
 5               <td>{{ foo.press.name }}</td>
 6             <td>
 7                 <a href="/del_book/?id={{ foo.bid }}">刪除</a>
 8                 <a href="/edit_book/?id={{ foo.bid }}">編輯</a>
 9             </td>
10             </tr>
11         {% endfor %}

有些時候查詢到的結果希望能編輯,又不想被胡亂修改可以使用下拉列表select

1 出版社:<select name="pre">
2                 {% for foo in press %} 3                     <option value="{{ foo.id}}">{{ foo.name }}</option>
4                 {% endfor %} 5 
6             </select>

此時后台在來獲取pre,取到的其實就是value的值

用Django自帶模板創建數據庫表的操作:

一對多用:主外鍵

多對多用:第三張表來標記關系

 1 class Student(models.Model):  2     sid=models.AutoField(primary_key=True)  3     sname=models.CharField(max_length=32,null=False,unique=True)  4     grade=models.ForeignKey(to='Grade')  5 
 6 
 7 class Grade(models.Model):  8     gid = models.AutoField(primary_key=True)  9     gname = models.CharField(max_length=48, null=False, unique=True) 10 
11 
12 class Teacher(models.Model): 13     tid = models.AutoField(primary_key=True) 14     tname = models.CharField(max_length=32, null=False, unique=True) 15     grade=models.ManyToManyField(to='Grade')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM