如何在 django 表单中获取员工用户的用户名

Posted

技术标签:

【中文标题】如何在 django 表单中获取员工用户的用户名【英文标题】:How fetch username of staff user in django forms 【发布时间】:2020-07-29 14:26:14 【问题描述】:

我正在使用自定义用户模型。我还有另一个客户模型。我希望用户字段仅显示员工用户,而该字段中的其他类型的用户不会显示在注册表单中。就我而言,它显示了所有类型的用户,无论是员工、客户还是服务用户。

Models.py

class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=254, unique=True)
    name = models.CharField(max_length=254, null=True)
    email = models.EmailField(max_length=254, null=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_Customer = models.BooleanField(default=False)
    is_Service_Provider = models.BooleanField(default=False)

    last_login = models.DateTimeField(null=True, blank=True)
    date_joined = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'username'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    def get_absolute_url(self):
        return "/users/%i/" % self.pk

    def get_username(self):
        return self.username

class Customer(models.Model):


    user = models.OneToOneField('accounts.User', on_delete=models.SET_NULL, null=True)
    email = models.EmailField(max_length=254, null=False)
    date_Of_Birth = models.DateField(null=False)
    country = models.ForeignKey('accounts.Country', null=True, on_delete=models.SET_NULL, related_name='Country')
    state = models.ForeignKey('accounts.State', null=True, on_delete=models.SET_NULL, related_name='State')
    city = models.ForeignKey('accounts.City', null=True, on_delete=models.SET_NULL, related_name='city')
    address = models.CharField(max_length=254, null=False)
    refernce_by_person_name = models.CharField(max_length=254, null=True)
    refernce_by_person_contact_no = models.IntegerField(null=True)
    phone_no = models.IntegerField(null=False)
    alternate_no = models.IntegerField(null=False)
    hobbies = models.CharField(max_length=254)
    

    def __str__(self):
        return self.user.username

views.py

def form(request):
    forms = CustomerRegistrationForm()

    if request.method == "POST":

        forms = CustomerRegistrationForm(request.POST)
        if forms.is_valid():
            forms.save() 
            return redirect('/customer/show')

    context = 
        'forms' : forms,
    

    return render(request,'customer/form.html', context)    

forms.py

class CustomerRegistrationForm(forms.ModelForm):
    class Meta:
        model = Customer
        fields = '__all__'

【问题讨论】:

【参考方案1】:

您可以像这样过滤员工用户。

class CustomerRegistrationForm(forms.ModelForm):      
    user = forms.ModelChoiceField(queryset=User.objects.filter(is_staff=True))
    class Meta:
        model = Customer
        fields = ['user','email','date_of_birth',...]

【讨论】:

谢谢,兄弟解决了问题。

以上是关于如何在 django 表单中获取员工用户的用户名的主要内容,如果未能解决你的问题,请参考以下文章

如何在不通过视图在所有页面中发送表单的情况下从 django 布局(如“base.html”)获取表单数据?

Django:如何在管理表单中获取当前用户?

如何在不完整的 Django 表单字段中获取用户输入?

Django 基于状态的多重身份验证后端

如何限制员工用户只能在 Django 管理页面中查看他们的信息?

Django - 如何排除表单字段视图?