2017-06-19 86 views
0

我有一個Django模型請求,它有一個字段Approver,它被設置爲具有超級用戶狀態的用戶。我想自動爲該字段賦值,以便在項目管理員之間輪換。歡迎任何建議。提前致謝。超級用戶Django模型外鍵

+1

歡迎來到StackOverflow。請花時間在[如何問一個聰明的問題](https://meta.stackexchange.com/questions/18584/how-to-ask-a-smart-question)上閱讀這篇文章,以及如何提供一個[最小,完整,可驗證的例子](https://stackoverflow.com/help/mcve)並相應地修改你的問題。 [如何提出一個好問題](https://stackoverflow.com/help/how-to-ask)上的這些提示也可能有用。 – Jeril

+0

你可以使用你的模型實例的id,併除以你的超級用戶使用%來獲得餘數來選擇一個。 –

+0

我想我們可能需要更多的想法。可以做的是將其分配給分配給它們的請求數最少的管理員。但總的來說,這個問題需要更多的信息 –

回答

0

我在Admin窗體中編寫了一個函數,該函數將批准者設置爲請求數量最少的用戶。對我來說工作得很好。

def get_recipient(self): 

    approvers = User.objects.annotate(num_of_requests=models.Count('model_field_related_name')).order_by('num_of_requests') 
    return approvers.first() 
1

我想到的一個簡單的解決方案就是在使用請求模型的html模板中,您可以執行評估可能的已簽名用戶的函數..類似於: 1.在請求中添加一個字段模型,該模型是一個外鍵您的用戶模型 實施例:

class Request(models.Model): 
some other code... 
    assigned_user=models.ForeignKey(User, on_delete=models.CASCADE) 

而用戶模型添加asigned布爾:

class User(models.Model): 
    assigned=models.BooleanField(default=False) 
  • 然後在HTML
  • 你可以這樣做:

    {% for user in Users %} 
        {% if user.isAdmin %} 
         {% if not user.assigned %} 
          <input name="request.varName">{{User.id}}</input> 
         {% endif %} 
        {% endif %} 
    {% endfor %} 
    

    請記住,在你看來,你必須打電話請求模型和用戶模型。您可以通過這種方式實現這一目標創造一個請求的代碼:

    class RequestCreate(CreateView): 
        ... some other code.. 
         def get_context_data(self, **kwargs): 
          context = super(RequestCreate, self).get_context_data(**kwargs) 
          context['Users'] = User.objects.all() 
          #context['venue_list'] = Venue.objects.all() 
          #context['festival_list'] = Festival.objects.all() 
          # And so on for more models 
        return context 
    

    我希望在這裏有用。

    0

    您可以將函數作爲默認值傳遞。定義一個函數,像這樣

    def default_func(): 
        last_assigned = Request.objects.latest().Approver # gets latest assigned Approver 
        # the below if statement always looks for the next superuser pk 
        if User.objects.filter(is_superuser=True, pk__gt=last_assigned.pk).exists(): 
         next_assigned_superuser = User.objects.filter(is_superuser=True, pk__gt=last_assigned.pk)\ 
          .order_by('pk')[0] 
        # if there isn't a superuser with a higher pk than the last_assigned_superuser, it will choose 
        # the superuser below or equal to it with the lowest pk. This will handle the case where there is 
        # only one superuser without any fuss. 
        else: 
         next_assigned_superuser = User.objects.filter(is_superuser=True, pk__lte=last_assigned.pk) \ 
          .order_by('pk')[0] 
    
        return next_assigned_superuser 
    

    ,並添加到您的審批領域:

    # you must pass the function without parenthesis at the end, or else it will 
    # set the default to whatever the value is at server run time. 
    # If you pass the function itself, it will be evaluated every time a 
    # default is needed. 
    Approver = models.ForeignKey(User, default=default_func) 
    

    編輯:增加了一個返回值default_func。哎呦。