在后台中我们编辑咨询记录时需要过滤,因为只有在“我”这里的咨询才应该显示给我,别人的则应该显示在别人的后台,所以这里的需求是,用户登录后,在跟进记录的下拉选框中只有与自己相关的记录,很明显需要对当前用户进行过滤:
当销售登陆后,查看某客户的跟进记录,那么他应该只能看到自己写的跟进记录,而不能查看别人写的记录。
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模型,所以过当前用户进行过滤,同样的道理,在对应的客户下拉框中也只能显示当前销售的客户,而不能把别的销售的客户显示出来。