簡體   English   中英

如何基於當前用戶獲取ChoiceField數據

[英]How to get ChoiceField data based on current user

我有一個模型StaffProfile。,同時創建用於Visit的表單,我想將staff_user數據(基於當前用戶)獲取到該ChoiceField( to_meet )。

models.py

class StaffProfile(models.Model):
      user = models.OneToOneField(User, on_delete=models.CASCADE, 
      related_name="user_profile")
      staff_user = models.ManyToManyField(User, null=True, blank=True, 
      related_name="staff_user")

class Visit(models.Model):
     name = models.CharField(max_length=200, name="name")
     gender = models.CharField(choices=GENDER_CHOICE, max_length=1, name="gender")
     mobile = models.CharField(max_length=18, default="", name="mobile")
     to_meet = models.ForeignKey(User, on_delete=models.CASCADE)

forms.py

class VisitForm(forms.ModelForm):
   to_meet = forms.ChoiceField(choices=[], required=False, label="Select Staff")
   class Meta:
     model = Visit
     fields = ("__all__")

   def __init__(self, *args, **kwargs):
      super(VisitForm, self).__init__(*args, **kwargs)
       self.fields['to_meet'].choices = StaffProfile.objects.filter(user=request.user).values_list("staff_user")

最初覆蓋視圖的__init__()方法

class VisitForm(forms.ModelForm):
    def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) super(VisitForm, self).__init__(*args, **kwargs) self.fields['to_meet'].choices = [self.request.user]

    to_meet = forms.ChoiceField(choices=[], required=False, label="Select Staff")

    class Meta:
        model = Visit
        fields = "__all__" # small typo here

然后,在您看來,

def foo_view(request):
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = VisitForm(request.POST,request=request)
        # check whether it's valid:
        if form.is_valid():
            # do somrthing
    .....

您需要將請求從視圖傳遞到表單。 例如:

def some_view(request):
    form = VisitForm(request=request)
    # rest of the code

並以以下形式使用:

def __init__(self, *args, **kwargs):
  request = kwargs.pop('request')
  super(VisitForm, self).__init__(*args, **kwargs)
  self.fields['to_meet'].choices = StaffProfile.objects.filter(user=request.user).values_list("staff_user")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM