我只想知道是否可以限制管理面板中模型的對象數量?是否可以在管理面板中限制模型的對象創建?
例如,我有一個名爲'Homepage'的模型,並且在管理面板中我不希望用戶可以創建多個主頁實例。
有沒有一種方法可以做到這一點?
我只想知道是否可以限制管理面板中模型的對象數量?是否可以在管理面板中限制模型的對象創建?
例如,我有一個名爲'Homepage'的模型,並且在管理面板中我不希望用戶可以創建多個主頁實例。
有沒有一種方法可以做到這一點?
如果只是要影響(而不想影響數據庫模型)的管理員,您可以創建自定義的ModelAdmin子類:
class HomePageAdmin(admin.ModelAdmin):
def add_view(self, request):
if request.method == "POST":
# Assuming you want a single, global HomePage object
if HomePage.objects.count() > 1:
# redirect to a page saying
# you can't create more than one
return HttpResponseRedirect("foo")
return super(HomePageAdmin, self).add_view(request)
# ...
admin.site.register(HomePage, HomePageAdmin)
做同樣事情的另一種策略是爲HomePage創建一個自定義的ModelForm,其中一個clean
方法強制執行單個主頁的要求。這會讓你的需求出現驗證錯誤,而不是作爲一個重定向比(或者數據庫錯誤):
from django import forms
from django.forms.util import ErrorList
class HomePageModelForm(forms.ModelForm):
def clean(self):
if HomePage.objects.count() > 1:
self._errors.setdefault('__all__', ErrorList()).append("You can only create one HomePage object.")
return self.cleaned_data
# ...
class HomePageAdmin(admin.ModelAdmin):
form = HomePageModelForm
# ...
admin.site.register(HomePage, HomePageAdmin)
如果它的「每個用戶一個主頁」,你將需要主頁有一個ForeignKey到用戶並適應以上。您可能還需要將當前的User對象存儲在threadlocals中以便從HomePageModelForm.clean
如果你想限制Homepage
爲每個用戶一個,那麼你可以使用一對一的關係,與OneToOneField
。至於限制爲N - a pre_save
signal可能會有用。
嘗試
class HomePage(models.Model):
user = models.ForeignKey(User, unique=True)
homepage = models.CharField(max_length=100, unique=True)
class Meta:
unique_together = (("user", "homepage"),)
中訪問它,謝謝..這是一個非常明確的解釋;) – israkir 2009-10-02 20:12:26