筛选Django中的许多字段未按预期工作

2024-10-02 20:39:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django docshere以及以前的一些StackOverflow问题来解决这个问题,但我似乎无法让它工作。我的目标是能够基于许多领域过滤模型。我遵循Mozilla Django教程走了这么远,但它没有按ManyToManyField(在我的例子中是category)过滤,所以我想添加它

models.py

from django.conf import settings
from django.db import models
from django.utils import timezone

class Category(models.Model):
    name = models.CharField(max_length=200, help_text='Enter a category')

    def __str__(self):
        return self.name

class BakingPost(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField(max_length=1000)
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)
    notes = models.TextField(max_length=1000, blank=True, null=True)
    ingredients = models.TextField(max_length=1000, blank=True, null=True)
    instructions = models.TextField(max_length=1000, blank=True, null=True)
    category = models.ManyToManyField(Category, help_text='Select a category')

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

    def display_category(self):
        return ', '.join(category.name for category in self.category.all())

    display_category.short_description = "Category"

管理员

from django.contrib import admin
from .models import BakingPost, Category

# admin.site.register(BakingPost)
# admin.site.register(Category)


@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    pass


@admin.register(BakingPost)
class BakingPostAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'created_date', 'published_date', 'display_category')
    list_filter = ('created_date', 'published_date')  # i want to be able to filter by category here too

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "category":
            kwargs["queryset"] = Category.objects.filter(name=request.user)
        return super().formfield_for_manytomany(db_field, request, **kwargs)

如果没有上面的formfield_for_manytomy,那么在Django的管理部分编辑一篇BakingPost就可以了。 As expected

当我实现这4行时,当我试图编辑BakingPost时,Category字段的所有值都消失了,它甚至没有给我一个过滤器框。 Here's what I meanNo filter box


Tags: djangonamefromimportselftruedateadmin
1条回答
网友
1楼 · 发布于 2024-10-02 20:39:46

您可能尝试遵循的模式(例如Django filter many to many field in admin?)用于在编辑BakingPost时,尝试限制在管理中分配哪些类别的选择是有效的。如果您试图将多对多字段添加到管理员的“我在看什么”控件中,那就不同了。要做到这一点,您应该能够将category添加到管理员的^{}字段中,因为in默认支持m2m字段

相关问题 更多 >