【问题标题】:Django filter data using field in another model connected via foreign keyDjango使用通过外键连接的另一个模型中的字段过滤数据
【发布时间】:2021-04-02 09:04:16
【问题描述】:

我有两个模型; SetsCards。一组中有许多卡片。我想得到它,以便我可以过滤在我的表中返回的卡片,但设置代码,对于下面的示例,它是khc

我已经设法通过将filter(set__code__exact="khc") 添加到Card.objects 来使其在一定程度上工作,但这不允许用户更改网页上的过滤。

我似乎无法将code 过滤器添加到CardFilter

models.py

class Set(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    code = models.CharField(max_length=64)
    ...

class Card(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    ...
    set = models.ForeignKey(Set, on_delete=models.CASCADE, related_name='Card')

views.py

def cards_page(request):
    card_list = Card.objects.filter(set__code__exact="khc").order_by('name')
    card_filter = CardFilter(request.GET, queryset=card_list)
    card_list = card_filter.qs

filters.py

class SetFilter(django_filters.FilterSet):
    code = CharFilter(field_name='code', lookup_expr='iexact', label='', widget=TextInput(attrs={'placeholder': 'Set Code', 'class': 'page-input', 'style': 'width: 150px;'}))
    name = CharFilter(field_name='name', lookup_expr='icontains', label='', widget=TextInput(attrs={'placeholder': 'Name', 'class': 'page-input', 'style': 'width: 150px;'}))
    type = CharFilter(field_name='type', lookup_expr='icontains', label='', widget=TextInput(attrs={'placeholder': 'Type', 'class': 'page-input', 'style': 'width: 150px;'}))

    class Meta:
        model = Set
        fields = ''


class CardFilter(django_filters.FilterSet):
    # doesnt work # code = CharFilter(field_name='set', lookup_expr='iexact', label='', widget=TextInput(attrs={'placeholder': 'Set Code', 'class': 'page-input', 'style': 'width: 150px;'}))
    name = CharFilter(field_name='name', lookup_expr='icontains', label='', widget=TextInput(attrs={'placeholder': 'Name', 'class': 'page-input', 'style': 'width: 150px;'}))
    type = CharFilter(field_name='type_line', lookup_expr='icontains', label='', widget=TextInput(attrs={'placeholder': 'Type', 'class': 'page-input', 'style': 'width: 150px;'}))

    class Meta:
        model = Card
        fields = ''

cards.html

<form method="get" class="" autocomplete="off">
    {{ card_filter.form.code }}
    {{ card_filter.form.name }}
    {{ card_filter.form.type }}
    <button class="page-btn-icon" type="submit">
    ...

过滤器截图:

【问题讨论】:

    标签: python django django-models django-views django-filter


    【解决方案1】:

    当我设法弄清楚该怎么做时,这真的很简单。

    我将set_id__code 添加到我的filters.py 文件中的field_name 变量中。 set_id 是将两个表连接在一起的字段,后跟两个下划线 (__),然后是我要过滤的 Set 模型中的字段名称。

    code = CharFilter(field_name='set_id__code', lookup_expr='iexact', label='', widget=TextInput(attrs={'placeholder': 'Set Code', 'class': 'page-input', 'style': 'width: 150px;'}))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 2013-08-24
      相关资源
      最近更新 更多