簡體   English   中英

Django-根據條件上傳自定義文件

[英]Django - custom file uploads based on criteria

我目前正在努力尋找解決以下問題的最佳方法:

我使用django-registration實現了用戶注冊,我希望每個用戶都可以上傳不同的文檔集。 每個用戶都有一個“代理機構”,需要一些額外的文檔,但是這些文檔可能有所不同。

因此,我的用戶基礎類將與每個用戶所需的所有那些基礎文檔具有一對一的關系,但是我不確定如何讓每個代理商定義自己的文檔集以及如何將其與用戶綁定。

謝謝。

在我看來,這些不是一對一的關系,而是一對多的關系(特別是:一對多的文檔)。

這將導致文檔包含用戶的外鍵。 如果一個文檔可以鏈接到許多用戶,則這甚至可能是多對多關系。

如果可以在用戶和代理商之間共享文檔,則文檔也可以向代理商提供可選的ForeignKey,或者-如果不需要用戶鏈接到文檔,則您可能想向文檔中添加通用關系“所有者”,鏈接到用戶或代理商。 有關更多詳細信息,請參見有關通用關系Django文檔

但是,通用關系受到一些限制,因此很難在.filter()和.exclude()查詢中使用它們。 因此,如果他們不必共享“所有者”或“作者”屬性,則建議您鏈接到具有不同屬性的“用戶”和“代理”,...

每個代理商是僅指一個用戶還是代理商將多個用戶“分組”? 在這些情況下,請在用戶模型中使用外鍵來引用代理。 這意味着,您需要繼承Django用戶模型或創建一個包含附加定義的變量的用戶配置文件。 我個人更喜歡這里的第二種選擇。 請參閱SimpleIsBetterThanComplex上的精彩文章,以獲取有關擴展用戶模型的這些以及其他選擇的信息,包括出色的代碼示例。

如果某個用戶也可能是多個代理商的一部分,則可以改為在代理商中使用ManyToMany,而不必考慮用戶模型。 但是,如果您不希望每個用戶擁有多個代理商,則不建議使用此選項。

更新1:

根據您的評論,一個用戶僅屬於一個代理商,但一個代理商可以鏈接到多個用戶。 在這種情況下,用戶模型應通過ForeignKey鏈接到代理商。 如果管理員用戶應該分配代理,這也很容易管理(至少在Django管理員中),因為管理員用戶只需編輯用戶本身(或個人資料)即可將代理鏈接到該代理。

使用post_save信號,您可以檢查代理商是否已鏈接到剛剛保存的用戶,如果代理商已將其鏈接到文件類型(在文檔模型和代理商處的類型屬性(具有設置或不設置特定選擇的CharField))用戶。 如果不是,請創建並鏈接它。 文檔模型還應包含“文件字段”,以便輕松檢查文檔是否已上傳。

更新2:

只是為了幫助您,這是SimpleIsBetterThanComplex上另一篇有關Django信號的精彩文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM