Django form表单下拉选框中过滤当前用户

在后台中我们编辑咨询记录时需要过滤,因为只有在“我”这里的咨询才应该显示给我,别人的则应该显示在别人的后台,所以这里的需求是,用户登录后,在跟进记录的下拉选框中只有与自己相关的记录,很明显需要对当前用户进行过滤:

当销售登陆后,查看某客户的跟进记录,那么他应该只能看到自己写的跟进记录,而不能查看别人写的记录。

class ConsultRecord(models.Model):
    """
    跟进记录表
    """
    customer = models.ForeignKey('Customer', verbose_name="所咨询客户")
    note = models.TextField(verbose_name="跟进内容...")
    status = models.CharField("跟进状态", max_length=8, choices=seek_status_choices, help_text="选择客户此时的状态")
    consultant = models.ForeignKey("UserInfo", verbose_name="跟进人", related_name='records')
    date = models.DateTimeField("跟进日期", auto_now_add=True)
    delete_status = models.BooleanField(verbose_name='删除状态', default=False)

    def __str__(self):
        return self.customer.name + '<--' + self.consultant.username

    class Meta:
        verbose_name_plural = verbose_name = '跟进记录' 
class ConsultRecordModelForm(forms.ModelForm):
    class Meta:
        model = models.ConsultRecord
        fields = '__all__'
        exclude = ['delete_status', ]

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field_name, field in self.fields.items():
            if field_name == 'consultant':
                # only the login user
                field.queryset = models.UserInfo.objects.filter(username=request.session.get('username'))

            if field_name == 'customer':
                # only the consultant's customer
                field.queryset = models.Customer.objects.filter(consultant__username=request.session.get('username'))

            field.widget.attrs.update({'class': 'form-control'}) 

这里的销售属于UserInfo模型,所以过当前用户进行过滤,同样的道理,在对应的客户下拉框中也只能显示当前销售的客户,而不能把别的销售的客户显示出来。

 

上一篇:Django form表单中ForeignKey无法实时更新数据源

下一篇:Centos配置yum源