【问题标题】:Django admin list filter on reverse relationship关于反向关系的 Django 管理列表过滤器
【发布时间】:2020-09-01 09:23:37
【问题描述】:

我有两个 django 模型:

class Order(models.Model):
    date = models.DateTimeField()
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='orders')
    shipping_address = models.CharField(max_length=200)
    phone_number = models.CharField(max_length=9)
    comment = models.CharField(max_length=100, blank=True, null=True)

class OrderStatus(models.Model):
    STATUS_ACCEPTED = 1
    STATUS_PROCESSING = 2
    STATUS_DELIVERING = 3
    STATUS_COMPLETED = 4
    CODE_CHOICES = (
        (STATUS_ACCEPTED, 'accepted'),
        (STATUS_PROCESSING, 'processing'),
        (STATUS_DELIVERING, 'delivering'),
        (STATUS_COMPLETED, 'completed'),
    )
    date_created = models.DateTimeField(auto_now_add=True)
    code = models.PositiveSmallIntegerField(choices=CODE_CHOICES)
    order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='status_list')

通常,如果我想获得所有处于“已接受”状态的订单,我可以编写 Order.objects.filter(orderstatus__code=1)。

但是如何让 django 管理员创建 OrderStatus 列表过滤器?

我在 Google 上搜索了很多,但在 stackoverflow 上只找到了一个答案,它声称只需将反向模型(在我的情况下为“orderstatus”)添加到 list_filter 元组应该可以工作,但我收到一条错误消息:The value of 'list_filter[1]' refers to 'orderstatus', which does not refer to a Field.

我做错了什么?

【问题讨论】:

    标签: django filter django-admin


    【解决方案1】:

    The value of 'list_filter[1]' refers to 'orderstatus', which does not refer to a Field.

    这是因为orderstatus 不是模型中的字段。将 order 字段更改为 orderstatus 或将传递给 list_filter 的名称更改为您的字段名称。

    【讨论】:

      【解决方案2】:

      在此处发布问题之前您是否自己尝试过,因为有很多与此相关的问题,无论如何我认为此链接会对您有所帮助。

      https://books.agiliq.com/projects/django-admin-cookbook/en/latest/many_to_many.html

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 2012-11-03
      • 2019-11-06
      • 1970-01-01
      • 2013-06-01
      • 2021-11-02
      • 1970-01-01
      相关资源
      最近更新 更多