一.業務需求
類似部落格的專案,應該是有關注功能的,乙個使用者可以關注多個使用者,也可以被多個使用者關注,我們需要在這種關係上新增乙個額外的字段表示使用者關注使用者的時間,這時候可以用到django的中介模型.
from django.contrib.auth.models importuser
class
contact(models.model):
user_from =models.foreignkey(user,
related_name='
rel_from_set')
user_to =models.foreignkey(user,
related_name='
rel_to_set')
created = models.datetimefield(auto_now_add=true,
db_index=true)
正常情況下,我們可以在多對多模型的一段使用manytomanyfield欄位來建立關係,用through指定中介模型,用symmetrical指定非對稱關係,false表示如果我關注了你,你不會自動的關注我,由於user是內建模型,我們需要用到
猴子補丁monkey-patch去在程式執行時給使用者新增字段
user.add_to_class('following',
models.manytomanyfield(
'self',
through=contact,
related_name='
followers',
symmetrical=false))
當你使用了乙個中介模型(intermediate model)給多對多關係,一些關係管理器的方法將不可用,例如:add()
,create()
以及remove()
。你需要建立或刪除中介模型(intermediate model)的例項來代替。
多對多關係
實體模型中相關的模型之間為了方便查詢需要做到你中有我 我中有你 一對多表設計上是在多方應用少方的主鍵作為外來鍵約束 模型上需要在多方加入乙個少方模型物件的屬性,在少方加入乙個多方物件的列表 語法 少方物件 db.relationship 少方模型名 backref db.backref xxlist...
Flask sqlalchemy多對多關係
from flask import flask from flask sqlalchemy import sqlalchemy article tag db.table article tag db.column article id db.integer,db.foreignkey article...
多對多關係對映
需要用到 manytomany註解,然後在需要維護關係的一方,加上 jointable註解。必須指定乙個維護關係,否則會導致關係表id重複出現錯誤。jointable 有以下屬性,joincolumns 設定該實體類對映在關係表中的外來鍵列名和參照列,inversecolumns 設定和該實體類關聯...