2009-09-29 6 views

답변

7

을 시도해보십시오

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 요구 사항을 적용하는 HomePage 용 사용자 지정 ModelForm을 만드는 것입니다. 이 귀하의 요구 사항이 아닌 리디렉션으로, 유효성 검사 오류로 표시 할 (또는 데이터베이스 오류 등)됩니다

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) 

을은 "사용자 당 하나 개의 홈페이지가"의 경우, 사용자에 대한 외래 키를 가지고 홈페이지가 필요합니다 위의 것을 적용하십시오. 현재 사용자 객체를 threadlocals에 저장하여 HomePageModelForm.clean

+0

에서 감사해야합니다. 이것은 매우 명확한 설명입니다.) – israkir

0

모든 사용자에 대해 Homepage을 1로 제한하려면 일대일 관계를 사용하고 OneToOneField을 사용할 수 있습니다. N으로 제한하는 경우에는 pre_save signal이 유용 할 수 있습니다.

0

당신이 영향을 원하는 (데이터베이스 모델에 영향을하고 싶지 않아) 단지 관리자의 경우, 사용자 정의 ModelAdmin 서브 클래스 만들 수 있습니다

class HomePage(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    homepage = models.CharField(max_length=100, unique=True) 

    class Meta: 
    unique_together = (("user", "homepage"),) 
관련 문제