【问题标题】:How to use ManyToManyField with condition如何在条件下使用 ManyToManyField
【发布时间】:2016-01-12 09:20:28
【问题描述】:

在 django 模型中,我需要过滤 ManyToManyField 有条件的

STATUS_CHOICES=(
  ('ACTIVE', 'Active'),
  ('INACTIVE', 'Inactive'),)
  

class Car(models.Model):
    name = models.CharField()
    status = models.CharField(choices=STATUS_CHOICES,
                              default='ACTIVE')

class Showroom(models.Model):
    name = models.CharField()
    stock_car = models.ManyToManyField('Car')

此代码是我尝试获取所有汽车的列表,但我需要根据某些条件进行过滤。

我需要ManyToManyField 只包含标记为的汽车

状态 = '活动'

任何想法如何处理它或一些示例代码表示赞赏。

【问题讨论】:

  • 你想在管理界面上显示吗?
  • 是的,我想要这个在管理界面上。

标签: django python-2.7 django-models


【解决方案1】:

假设您希望获得所有有现车的展示厅:

Showroom.objects.filter(stock_car__status='ACTIVE')

更多信息:Django documentation: Making queries

【讨论】:

  • 在视图中使用的正确答案,但我需要在 cms 中选择列表中显示的模型中进行过滤。
  • 哪个厘米?您应该在问题中包含所有详细信息。
【解决方案2】:

在 ModelAdmin 中,您可以使用 formfield_for_manytomany 过滤数据 更多详情请见docs

即:

class ShowroomAdmin(admin.ModelAdmin):
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "stock_car":
            kwargs["queryset"] = Car.objects.filter(status='ACTIVE')
        return super(ShowroomAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2022-07-06
    相关资源
    最近更新 更多