【发布时间】:2010-12-01 21:20:33
【问题描述】:
在获取基于 Unit 的成员时,我只想获取截至目前实际在该单元中的成员。
我有一个看起来像这样的模型:
class Member(models.Model):
name = models.CharField(max_length=256)
unit = models.ManyToManyField(Unit, through='Membership')
class Membership(models.Model):
member = models.ForeignKey(Member)
unit = models.ForeignKey(Unit)
start = models.DateField(default=date.today)
stop = models.DateField(blank=True, null=True)
class Unit(models.Model):
name = models.CharField(max_length=256)
如您所见,成员可以在单位中拥有“假”成员资格,这只是历史记录,不应在管理员的搜索和列表中考虑。它们应该显示在单个对象的更改页面中。
管理员是这样的:
class MembershipInline(admin.TabularInline):
model = Membership
extra = 1
class MemberAdmin(admin.ModelAdmin):
list_filter = ('unit',)
inlines = [MembershipInline,]
那么我怎么能(如果可能的话),在单元过滤时只得到那些membership__stop__isnull=True的单元?
我尝试了管理器,我可以让它们在管理本身的模型上工作,但不能在过滤/搜索上工作。还有一个 def queryset(self) 方法是可覆盖的,但我不知道如何使用它来解决我的问题。
编辑,如何使用:一个成员在一个单元中只有一个成员,但是,他们可能是以前的成员,但他们已经结束(停止)。所以我只想过滤(并在列表视图中显示)那些拥有开放式成员资格的成员(例如,他们现在是该单位的成员)。
有什么想法吗?
【问题讨论】:
标签: python django filter django-admin many-to-many