我有一个跨多个Django站点重用的文章数据库。在SiteArticle模型中还存储了每篇文章的一些特定于站点的信息。一点信息是每个SiteArticle的站点特定标签列表。以下是models.py
:
class Article(models.Model):
sites = models.ManyToManyField(Site, through='SiteArticle')
class SiteArticle(models.Model):
site = models.ForeignKey(Site)
article = models.ForeignKey(Entiteit)
tags = models.ManyToManyField('Tag', blank=True)
class Tag(models.Model):
name = models.CharField(max_length=255)
site = models.ForeignKey(Site, related_name='tags')
我使用内联管理员编辑和添加每篇文章的SiteArticle对象。下面是admin.py
:
class InlineSiteArticle(admin.StackedInline):
model = SiteArticle
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
inlines = [InlineSiteArticle]
编辑文章时,我希望内联站点文章表单仅显示相关站点的标签。我试图重写formfield_for_manytomany()方法,但在这里我无法访问筛选queryset所需的instance
变量(该变量应为当前SiteArticle的实例):
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "tags":
kwargs["queryset"] = instance.site.tags.all()
^^^^^^^^
return super(InlineSiteArticle, self).formfield_for_manytomany(db_field, request, **kwargs)
我已经研究了this Stack Overflow answer,它解决了一个非常相关的问题。但是,在我的例子中,我不需要访问“父”实例,只需要访问当前表单的SiteArticle对象的实例。我怎样才能解决这个问题
编辑——我已经发现,get_formset()确实得到了一个传入的实例。但是,此实例是一篇文章,而不是筛选queryset所需的SiteArticle
这是我自己找到的答案。请随意编辑、评论或提供更好的解决方案
我创建了一个用于编辑SiteArticles的自定义表单,我使用ModelAdmin的
form
选项将其传递给ArticleAdmin。在这个表单的构造函数中,我根据当前模型实例对queryset进行了过滤,该实例现在可以作为self.instance
使用相关问题 更多 >
编程相关推荐