我有一個在多個Django網站上重複使用的文章數據庫。存儲在SiteArticle模型中的每篇文章還有一些特定於站點的信息。一點信息是每個SiteArticle的特定於站點的標籤列表。這裏的models.py
:如何限制基於當前實例的InlineAdmin中的選項?
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]
編輯文章的時候,我想內嵌SiteArticle形式僅顯示相關網站的標籤。我試圖重寫formfield_for_manytomany()方法,但在這裏我沒有訪問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()確實獲得通過一個實例然而,這種情況下是一篇文章,而不是篩選查詢集所需的SiteArticle。