2009-09-29 50 views

回答

7

如果只是要影響(而不想影響數據庫模型)的管理員,您可以創建自定義的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

+0

中訪問它,謝謝..這是一個非常明確的解釋;) – israkir 2009-10-02 20:12:26

0

如果你想限制Homepage爲每個用戶一個,那麼你可以使用一對一的關係,與OneToOneField。至於限制爲N - a pre_save signal可能會有用。

0

嘗試

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

    class Meta: 
    unique_together = (("user", "homepage"),) 
相關問題