【问题标题】:django filter with user and profile model带有用户和配置文件模型的 django 过滤器
【发布时间】:2021-02-18 09:58:24
【问题描述】:

我正在使用与 Profile 模型具有一对一关系的默认 User 模型

我正在使用 django-filter 来搜索东西,但它只适用于 User 模型,而 profile 模型中没有任何效果。如何将配置文件模型包含到搜索中?

filters.py:

class AdminUserFilters(django_filters.FilterSet):
first_name = CharFilter(field_name='first_name', lookup_expr='icontains')
last_name = CharFilter(field_name='last_name', lookup_expr='icontains')
username = CharFilter(field_name='username', lookup_expr='icontains')
email = CharFilter(field_name='email', lookup_expr='icontains')

class Meta:
    model = User
    fields = ('username', 'first_name', 'last_name', 'email',)

models.py:

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
birthdate = models.DateField(null=True, blank=False, max_length=8)

【问题讨论】:

    标签: django profile django-filter


    【解决方案1】:

    试试这个

    未测试。

    class AdminUserFilters(django_filters.FilterSet):
       first_name = CharFilter(field_name='first_name', lookup_expr='icontains')
       last_name = CharFilter(field_name='last_name', lookup_expr='icontains')
       username = CharFilter(field_name='username', lookup_expr='icontains')
       email = CharFilter(field_name='email', lookup_expr='icontains')
    
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'userprofile__birthdate',)
    
    
    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE, 
             related_name='userprofile')
        birthdate = models.DateField(null=True, blank=False, max_length=8)
    

    https://django-filter.readthedocs.io/en/stable/guide/usage.html#generating-filters-with-meta-fields

    【讨论】:

    • 行得通!我将命名更改为 profile 而不是 userprofile 因为它给了我 user.profile 检查的错误
    • @stelity 如果你设置了related_name='userprofile' 它将起作用。不管怎样,你的问题已经解决了。
    • 是的,它确实有效。我的意思是它给了我其他错误,例如 {% if user.profile.is_admin %}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2018-09-29
    • 2016-06-16
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多