考慮以下模型
在models.py中:
class Volunteer(models.Model):
account = models.OneToOneField(
UserAccount,
on_delete=models.CASCADE,
related_name= "volunteer",
primary_key=True)
request_offers = models.ManyToManyField('Request', related_name="volunteers", blank = True)
volunteer_communities = models.ManyToManyField('Community', related_name="volunteers", blank = True)
class Request(models.Model):
req_type = models.ForeignKey('RequestTypes', related_name="requests", on_delete = models.CASCADE, blank = False, null = False)
一個志愿者可以有許多 request_offers(請求型別)。
在隱式 appname_volunteer_request(多對多)表中,除了默認欄位 id、request_id 和志愿者 ID 之外,我還需要另一個名為date的欄位。
有沒有辦法在不創建直通表的情況下在隱式表上添加附加欄位?
謝謝!:)
uj5u.com熱心網友回復:
不幸的是,沒有直通表就沒有辦法做到這一點。
您可以嘗試再創建一個表,其中通過表的 id 將與日期配對,然后在徹底表上觸發信號時更改它。其他選項是通過覆寫管理器的save, delete, create方法和方法來手動管理它關系經理add, clean, remove, set
可能對您有幫助的資訊: https ://docs.djangoproject.com/en/3.2/ref/signals/#post-save https://docs.djangoproject.com/en/4.0/topics/db/models/#intermediary -多對多
uj5u.com熱心網友回復:
最簡單和最優雅的方法是使用through=…模型 [Django-doc],這最終將需要最少的作業來保持資料同步。在您的直通模型中,它將充當聯結表 [wiki],您可以指定一個DateTimeField或任何其他欄位:
class Volunteer(models.Model):
# …
request_offers = models.ManyToManyField(
'Request',
related_name='volunteers',
through='VolunteerRequest',
blank = True
)
class Request(models.Model):
req_type = models.ForeignKey(
'RequestTypes',
related_name='requests',
on_delete = models.CASCADE
)
class VolunteerRequest(models.Model):
volunteer = models.ForeignKey(
Volunteer,
on_delete=models.CASCADE
)
request = models.ForeignKey(
Request,
on_delete=models.CASCADE
)
date = models.DateTimeField(auto_now_add=True)
創建更多的表只需要額外的邏輯來保持這些表的同步,并且通常會使查詢更加復雜,并且會使資料庫效率降低。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/443188.html
