django_models_一對一關系


OneToOneField用來定義一對一關系。 和使用其它Field類型一樣:在模型當中把它做為一個類屬性包含進來。

當某個對象想擴展自另一個對象時,最常用的方式就是在這個對象的主鍵上添加一對一關系。

OneToOneField要一個位置參數:與模型關聯的類。

例如,如果你正在建立一個“places”的數據庫,那么你將建立一個非常標准的地址、電話號碼等 在數據庫中。 接下來,如果你想在place數據庫的基礎上建立一個restaurant數據庫,而不想將已有的字段復制到Restaurant模型,那你可以在 Restaurant 添加一個OneToOneField 字段,這個字段指向Place(因為Restaurant 本身就是一個Place;事實上,在處理這個問題的時候,你應該使用一個典型的 inheritance,它隱含一個一對一關系)。

ForeignKey一樣,可以定義遞歸關系,並可以引用尚未定義的模型

提示:

  在一對一關聯關系模型示例中有一套完整的例子。

OneToOneField字段也接受一個可選的parent_link參數。

在以前的版本中,OneToOneField 字段會自動變成模型 的主鍵。 不過現在已經不這么做了(不過要是你願意的話,你仍可以傳遞 primary_key參數來創建主鍵字段)。 所以一個 模型 中可以有多個OneToOneField 字段。

跨文件的模型

訪問其他應用的模型是非常容易的。 在文件頂部你定義模型的地方,導入相關的模型來實現它。 然后,無論在哪里需要的話,都可以引用它。 例如:

from django.db import models
from geography.models import ZipCode

class Restaurant(models.Model):
    # ...
    zip_code = models.ForeignKey(
        ZipCode,
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
    )

字段名稱限制

Django 對字段的命名只有兩個限制:

  1. 字段的名稱不能是Python 保留的關鍵字,因為這將導致一個Python 語法錯誤。 例如:

    class Example(models.Model): pass = models.IntegerField() # 'pass' is a reserved word! 
  2. 由於Django 查詢語法的工作方式,字段名稱中連續的下划線不能超過一個。 例如:

    class Example(models.Model): foo__bar = models.IntegerField() # 'foo__bar' has two underscores! 

這些限制有變通的方法,因為沒有要求字段名稱必須與數據庫的列名匹配。 參見db_column選項。

SQL 的保留字例如selectwhere 和join,可以用作模型的字段名,因為Django 會對底層的SQL 查詢語句中的數據庫表名和列名進行轉義。 它根據你的數據庫引擎使用不同的引用語法。

 


免責聲明!

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



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