Django管理员列表过滤器的反向关系

时间:2020-05-15 14:02:58

标签: django filter django-admin

我有两个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上只找到了一个答案,它声称只需向list_filter元组添加反向模型(在我的情况下为'orderstatus')就可以了,但是我收到一条错误消息:The value of 'list_filter[1]' refers to 'orderstatus', which does not refer to a Field. < / p>

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

在这里发布问题之前,您是否尝试过自己,因为有很多与此问题相关的问题,所以我认为此链接可以为您提供帮助。

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

答案 1 :(得分:0)

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

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