Django 如何通过模型访问管理器
我已经为直通模型创建了一个管理器,希望在访问多对多对象时使用它Django 如何通过模型访问管理器,django,many-to-many,django-managers,Django,Many To Many,Django Managers,我已经为直通模型创建了一个管理器,希望在访问多对多对象时使用它 class Contact(models.Model): first_name = models.CharField(max_length=50, null=True, blank=True) last_name = models.CharField(max_length=50, null=True, blank=True) email = models.EmailField() class Contact
class Contact(models.Model):
first_name = models.CharField(max_length=50, null=True, blank=True)
last_name = models.CharField(max_length=50, null=True, blank=True)
email = models.EmailField()
class ContactList(models.Model):
name = models.CharField(max_length=50)
contacts = models.ManyToManyField(
Contact,
through='ContactListEntry',
blank=True,
)
class ContactListEntry(models.Model):
contact_list = models.ForeignKey(ContactList, related_name='contact_list_entries')
contact = models.ForeignKey(Contact, related_name='contact_list_entries')
removed = models.BooleanField(default=False) # Used to avoid re-importing removed entries.
# Managers.
objects = ContactListEntryManager()
经理:
class ContactListEntryManager(Manager):
def active(self):
return self.get_queryset().exclude(removed=True)
是否有任何方法可以通过该字段访问经理
这是:
class ContactListView(DetailView):
model = ContactList
template_name = 'contacts/contact_list.html'
context_object_name = 'contact_list'
def get_context_data(self, **kwargs):
ctx = super(ContactListView, self).get_context_data(**kwargs)
contact_list_entries = self.object.contacts.active() # <-- THIS HERE.
ctx.update({
"contact_list_entries": contact_list_entries,
})
return ctx
class ContactListView(详细视图):
型号=联系人列表
模板名称='contacts/contact\u list.html'
上下文\对象\名称='联系人\列表'
def获取上下文数据(自身,**kwargs):
ctx=super(ContactListView,self)。获取上下文数据(**kwargs)
contact_list_entries=self.object.contacts.active()#您尝试过这样做吗<代码>联系人列表项=self.object.objects.active()
。如果要返回所有活动的联系人,为什么不执行contact\u list\u entries=ContactList.objects.active()
contact\u list\u entries=self.object.objects.active()
操作:“无法通过联系人列表实例访问管理器”。我需要contact对象,因为它们作为qs进入tables2实例。显然,我可以做一些类似于[entry.contact for entry in ContactList.objects.active()]
的事情,但我认为更好的方法是使用一个管理器,因为这是一个标准情况,并且使用了很多次。