我只想知道可以在管理面板中限制模型的对象数量吗?

例如,我有一个名为“主页”的模型,并且在管理面板中我不希望用户创建多个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方法来执行单个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)

如果它是“每个用户一个HomePage”,则需要HomePage具有一个User的ForeignKey并适应以上情况。您可能还需要将当前的User对象存储在threadlocals中,以便从HomePageModelForm.clean访问它

关于django - 是否有可能在管理面板中限制模型的对象创建?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1494168/

10-12 16:47