我在Django制作了一个ManyToManyfield,但似乎不能在Django管理中编辑它.

在阅读了一些文档后,我发现我需要添加某种小部件,所以我添加了filter_horizontal=('collections',)(显示为Django Admin ManyToManyField),但这似乎会导致错误.

以下是我使用的一些代码.

# models.py
class Product(models.Model):
    date_added = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=7, decimal_places=2)
    digital = models.BooleanField(default=False,null=True, blank=True)
    image = models.ImageField(null=True, blank=True)
    description = models.CharField(max_length=1000, null=True, blank=True)
    description_image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.name

    @property
    def imageURL(self):
        try:
            url = self.image.url
        except:
            url = ''
        return url

    @property
    def descriptionImageURL(self):
        try:
            url = self.description_image.url
        except:
            url = ''
        return url

...

class Collection(models.Model):
    title = models.CharField(max_length=200, null=False)
    product = models.ManyToManyField(Product, related_name='collections', blank=True)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title
# admin.py
from django.contrib import admin

from .models import *

admin.site.register(Customer)
admin.site.register(Product)
admin.site.register(Order)
admin.site.register(OrderItem)
admin.site.register(ShippingAddress)
admin.site.register(TextBanner)
admin.site.register(FocusSection)

class CollectionAdmin(admin.ModelAdmin):
    filter_horizontal = ('collections',)

admin.site.register(Collection, CollectionAdmin)

这会导致错误:<class 'store.admin.CollectionAdmin'>: (admin.E019) The value of 'filter_horizontal[0]' refers to 'collections', which is not a field of 'store.Collection'..我将非常感谢你的帮助.

推荐答案

管理员操作的型号是Collection型号,因此该字段为product:

class CollectionAdmin(admin.ModelAdmin):
    filter_horizontal = ('product',)

Note:由于ManyToManyField指的是collection个元素, ManyToManyField的人通常会被赋予plural个名字.因此,您可能希望 考虑将product改为products.

Django相关问答推荐

如何使更新记录在 Django 模型中传递信号?

DjangoAdmin与外部数据库的模型无法保存或过滤

SQLite上可以正常使用Many2Many链接注释,但MariaDB上无法正常使用(生产环境)

Django通用列表视图与多查询搜索

将两个视图重定向到具有不同 url id Django 的一个模板的正确方法

如何在 Django REST Framework API 响应中使用多标签过滤器?

来自 Django 应用程序的日志(log)消息未上传到 AWS CloudWatch

Django:想要将一个空字段显示为空白而不是显示无

使用基于类的 UpdateView 在 Django 中更新用户模型

django 管理员登录突然要求 csrf 令牌

可以在基于 Django 类的视图中设置实例变量吗?

Django中的单表继承

在基于类的通用视图 CreateView 中访问 request.user 以便在 Django 中设置 FK 字段

CherryPy 与 Django

django 模板 if 或语句

如何在 Django 和 django-jsonfield 中将 JSONField 的默认值设置为空列表?

python/django中setattr和对象操作的区别

为整个结果集向 Django Rest Framework 结果添加额外数据

过滤查询参数

提供来自 django 的压缩内容