2017-05-30 63 views
0

Django - 我如何限制用戶可以創建的對象數量?

我需要知道我是否可以限制用戶可以在特定模型中創建的對象的數量,並根據用戶配置文件創建的對象的數量。

我去試着解釋一下。我有這個模型

class StoreBranchOffice(models.Model): 
store = models.ForeignKey(
     StoreBranchOffice, 
     verbose_name=_('store branch') 
    ) 
name = models.CharField(
     max_length=30, 
     verbose_name=_('name'), 
    ) 
email = models.EmailField(
     blank=True, 
     verbose_name=_('email'), 
    ) 
phone = models.CharField(
     max_length=15, 
     verbose_name=_('phone'), 
     ) 
address = models.CharField(
     max_length=100, 
     verbose_name=_('address'), 
    ) 

用戶配置型號

class UserProfile(models.Model): 
    # Relations 
    user = models.OneToOneField(
      User, 
      verbose_name=_('User'), 
     ) 
    store_branch = models.ForeignKey(
      Store, 
      verbose_name=_('Store'), 
     ) 
    # Attributes - Mandatory 
    level = models.IntegerField(
      choices=LEVEL_CHOICES, 
      default=1, 
      verbose_name=_('Level'), 
     ) 
    stores_enable = models.BooleanField(
      default=True, 
      verbose_name=_('Stores Enable'), 
     ) 
    branch_max = models.IntegerField(
       default=1, 
       verbose_name=_('branches admited') 
     ) 

那麼,在用戶配置文件,我有一個字段都承認用戶分支機構的數量... 好吧,我需要檢查用戶是否嘗試創建分支機構,是否已經承認創建分支機構或用戶是否擁有最大數量的分支機構。

非常感謝!

+0

您想限制用戶可以創建的分支機構數量?是不是這樣? – zaidfazil

+0

您在這裏沒有任何記錄哪個用戶創建了辦公室。 –

+0

的確,我想限制用戶可以創建的分支的數量,通過從我有一個整數字段的用戶配置文件中獲取該數字來分配最大數量 – marcosgue

回答

0

你能做到這一點的看法是這樣,

def your_view(request): 

    if form.is_valid(): 
     store = request.user.store_branch 
     max_count = request.user.branch_max 
     if StoreBranchOffice.objects.filter(store=store).count() >= max_count: 
      return #Your error message 

或者你可以在你的表單驗證爲此,

class StoreBranchOfficeForm(forms.ModelForm): 

    def __init__(self, user, *args, **kwargs): 
     self.user = user 
     super(StoreBranchOfficeForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = StoreBranchOffice 
     fields = '__all__' 

    def clean(self): 
     store_id = self.cleaned_data.get('store') 
     store = Store.objects.get(id=store_id) 
     if not store == self.user.userprofile.store: 
      raise ValidationError("Not Authorised") 
     max_count = self.user.branch_max 
     if StoreBranchOffice.objects.filter(store=store).count() >= max_count: 
      raise ValidationError("Maximum count of offices reached.") 
     return super(StoreBranchOfficeForm, self).clean() 

然後,當您在您的視圖每次調用form.is_valid()將被驗證..

但您需要每次將用戶轉到表單中,

form = StoreBranchOfficeForm(user=request.user) 
相關問題