我正在使用一些django模型條目表單來更新我們網站上發佈的一些個人信息。我希望人們通過用他們的用戶名登錄到/ admin來更新他們自己的傳記信息,但我不希望他們能夠實時更新網頁。我想知道是否有可能當他們更新模型,以便能夠通知我,然後我可以用某種manage.py命令行得通。Django:更新模板 - 通知管理員
也許這會更容易建立一個鏡像開發網站,然後看到它後,將該信息推送到我們的部署?
我正在使用一些django模型條目表單來更新我們網站上發佈的一些個人信息。我希望人們通過用他們的用戶名登錄到/ admin來更新他們自己的傳記信息,但我不希望他們能夠實時更新網頁。我想知道是否有可能當他們更新模型,以便能夠通知我,然後我可以用某種manage.py命令行得通。Django:更新模板 - 通知管理員
也許這會更容易建立一個鏡像開發網站,然後看到它後,將該信息推送到我們的部署?
首先,不要讓你的用戶登錄到管理,這不是它的目標:
一個Django的最強大的部分之一是自動管理界面。它從您的模型中讀取元數據以提供快速,以模型爲中心的界面,其中可信用戶可以管理您網站上的內容。 管理員建議的使用僅限於組織的內部管理工具。它並不打算構建你的整個前端。
- Django Admin Official Reference
考慮到管理員只限於「可信用戶」,也沒有必要來驗證他們的意見。
你應該在你的前端創建一個表單(例如在用戶的配置文件空間)。
要驗證他們在這種形式的輸入,你有幾個選項。最簡單的是可能創造一個ModerationModel
這將是這樣的:
class ModerationModel(models.Model):
STATUS_CHOICES = [
('pending', _("Pending"),
('accepted', _("Accepted"),
('rejected', _("Rejected"),
]
submitter = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)
submitter_ip = models.GenericIPAddressField()
date_submitted = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=20, choices=STATUS_CHOICES)
form_class = models.CharField(
max_length=100,
help_text=_(
"Python dotted path to the Form class. Example: "
"myapp.forms.UserBiographyForm"
),
)
form_data = models.TextField(
help_text=_(
"Serialized form data"
),
)
當表單提交,而不是調用form.save()
方法,您將調用創建出包含序列化表單數據ModerationModel
實例的自定義方法。然後,您將能夠反序列化表單數據,重新生成表單實例並在驗證後保存它。
其他解決方案可能使用第三方應用程序,例如django-simple-history,使您可以跟蹤對模型實例所做的更改並還原這些更改。