isr*_*kir 2 django django-models
我只想知道是否可以在管理面板中限制模型的对象数量?
例如,我有一个名为'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)
Run Code Online (Sandbox Code Playgroud)
另一种做同样事情的策略是为HomePage创建一个自定义ModelForm,其clean方法是强制执行单个HomePage要求.这将使您的需求显示为验证错误,而不是重定向(或数据库错误):
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)
Run Code Online (Sandbox Code Playgroud)
如果它是"每个用户一个主页",您将需要HomePage为用户提供ForeignKey并调整上述内容.您可能还需要将当前User对象存储在threadlocals中以便从中访问它HomePageModelForm.clean
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |