我正在使用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就可以了。
当我实现这4行时,当我试图编辑BakingPost时,Category字段的所有值都消失了,它甚至没有给我一个过滤器框。
您可能尝试遵循的模式(例如Django filter many to many field in admin?)用于在编辑} 字段中,因为in默认支持m2m字段
BakingPost
时,尝试限制在管理中分配哪些类别的选择是有效的。如果您试图将多对多字段添加到管理员的“我在看什么”控件中,那就不同了。要做到这一点,您应该能够将category添加到管理员的^{相关问题 更多 >
编程相关推荐