更改django筛选器中下拉选项的方法



我正在尝试更改用户字段的下拉值。我想显示电子邮件地址,而不是笔名+apellido。因为在我的模型中,我有一个返回nombre+apellido的str,这些值显示在下拉列表中。如何在不更改Tutor模型中的str的情况下更改这些值?尝试执行CustomManager,但没有成功。

型号:


class Tutor(models.Model):
user = models.OneToOneField(
User, on_delete=models.CASCADE, primary_key=True)
nombre = models.CharField(max_length=50, blank=False, null=True)
apellido = models.CharField(max_length=50, blank=False, null=True)
biografia = models.TextField()
curriculum = models.FileField(upload_to="curriculums/", blank=True, null=True)
foto = models.ImageField(blank=True, null=True)
carrera = models.ManyToManyField(Carrera, blank=True)
linea_invest = models.ManyToManyField(Linea_Invest, blank=True)
correo = models.EmailField(blank=True, null=True)
numero_celular = models.CharField(max_length=20, blank=True, null=True)

class Meta:
verbose_name_plural = "Tutores"
verbose_name = "Tutor"
def __str__(self):
return '%s %s' % (self.nombre, self.apellido)

过滤器

class TutorFilter(django_filters.FilterSet):
nombre = CharFilter(field_name="nombre", label="Nombre",lookup_expr='icontains')
apellido = CharFilter(field_name="apellido", label="Apellido",lookup_expr='icontains')
carrera = ModelMultipleChoiceFilter(field_name= "carrera", queryset= Carrera.objects.all())
user = ModelChoiceFilter(field_name = "user", label = "correo", queryset = Tutor.objects.all())
class Meta:
model = Tutor
fields = ("nombre", "apellido", "carrera","user")

在您的TutorFilter中。更改

user = ModelChoiceFilter(field_name = "user", label = "correo", queryset = user.objects.all())

我是如何解决的:

def get_tutores():
tutores = []
for tut in Tutor.objects.all():
tutores.append((tut.user.id,tut.user.email,))
return tutores

class TutorFilter(django_filters.FilterSet):
nombre = CharFilter(field_name="nombre", label="Nombre",lookup_expr='icontains')
apellido = CharFilter(field_name="apellido", label="Apellido",lookup_expr='icontains')
carrera = ModelMultipleChoiceFilter(field_name= "carrera", queryset= Carrera.objects.all())
user = ChoiceFilter( label = "correo", choices=get_tutores())

class Meta:
model = Tutor
fields = ("nombre", "apellido", "carrera","user")

看看我如何不需要更改模型Tutor中的str方法来在下拉列表中显示导师的电子邮件作为选项,因为我没有使用ModelChoiceFilter,而是改为ChoiceFilter。不知道您可以在ChoiceFilter中的choices参数中调用函数。

最新更新