亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django動態模型字段

Django動態模型字段

溫溫醬 2019-08-09 10:40:50
Django動態模型字段我正在開發一個多租戶應用程序,其中一些用戶可以定義自己的數據字段(通過管理員)以收集表單中的其他數據并報告數據。后一位使JSONField不是一個很好的選擇,所以我有以下解決方案:class CustomDataField(models.Model):     """     Abstract specification for arbitrary data fields.     Not used for holding data itself, but metadata about the fields.     """     site = models.ForeignKey(Site, default=settings.SITE_ID)     name = models.CharField(max_length=64)     class Meta:         abstract = Trueclass CustomDataValue(models.Model):     """     Abstract specification for arbitrary data.     """     value = models.CharField(max_length=1024)     class Meta:         abstract = True請注意CustomDataField如何具有ForeignKey to Site - 每個站點將具有一組不同的自定義數據字段,但使用相同的數據庫。然后,各種具體數據字段可以定義為:class UserCustomDataField(CustomDataField):     passclass UserCustomDataValue(CustomDataValue):     custom_field = models.ForeignKey(UserCustomDataField)     user = models.ForeignKey(User, related_name='custom_data')     class Meta:         unique_together=(('user','custom_field'),)這導致以下用途:custom_field = UserCustomDataField.objects.create(name='zodiac', site=my_site) #probably created in the adminuser = User.objects.create(username='foo')user_sign = UserCustomDataValue(custom_field=custom_field, user=user, data='Libra')user.custom_data.add(user_sign) #actually, what does this even do?但這感覺非常笨重,特別是需要手動創建相關數據并將其與具體模型相關聯。有更好的方法嗎?先發制人棄用的選項:自定義SQL以即時修改表。部分是因為這不會擴展,部分是因為它太過分了。NoSQL之類的無架構解決方案。我沒有反對他們,但他們仍然不適合。最終,這些數據被輸入,并且存在使用第三方報告應用程序的可能性。JSONField,如上所列,因為它不能很好地處理查詢。
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

進一步的研究表明,這是實體屬性值設計模式的一個特例,它已經通過幾個包為Django實現。

首先,有一個原始的eav-django項目,它位于PyPi上。

其次,第一個項目django-eav是一個更新的分支,它主要是一個允許在第三方應用程序中使用django自己的模型或模型的EAV的重構。


查看完整回答
反對 回復 2019-08-09
  • 3 回答
  • 0 關注
  • 945 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號