如何在两个模型之间进行过滤?

时间:2019-07-15 18:57:33

标签: django django-models

我有两个模型。一个是合作伙伴。另一个是联系方式。合作伙伴是公司的信息。联系人是该公司的联系人。如何通过将公司名称与联系人所属的外键合作伙伴进行比较来获取公司的联系人列表。

我尝试使用查询,但是结果不是我期望的。

class Partner(TimeStampedModel, StatusModel):

    name = models.CharField(blank=False,
    help_text="Name of the role or function", 
    max_length=64,
    verbose_name="Partner Type", )

    parent = models.ForeignKey(
    'self',
    blank=True,
    help_text="Parent Company name (if necessary)",
    null=True,
    on_delete=models.CASCADE,
    max_length=200
    )

class Contact(ContactModel, TimeStampedModel):
        partner = models.ForeignKey(
        Partner,
        blank=True,
        null=True,
        on_delete=models.SET_NULL,
        related_name="contacts",)

Urls.py

from .views import (
    ContactsListView,
    ContactsDetailView,
    ContactsCreateView,
    ContactsUpdateView,
    ContactsDeleteView,
)
from . import views

app_name = 'contacts'

urlpatterns = [
    path('', ContactsListView.as_view(), name='list'),
    path('<int:pk>/', ContactsDetailView.as_view(), name='detail'),
    path('new/', ContactsCreateView.as_view(), name='create'),
    path('<int:pk>/update/', ContactsUpdateView.as_view(), name='update'),
     path('<int:pk>/delete', ContactsDeleteView.as_view(), name='delete'),
    ]


我想要的是属于该公司的联系人列表。

假设公司名称为Shell。 在联系人上,我会填写对方的壳。我想查询外壳程序中所有的联系人。

编辑:表示联系人不是合作伙伴。

2 个答案:

答案 0 :(得分:0)

您可以使用以下行获取合作伙伴实例的相关联系人:

related_contacts = partner_instance.contact_set

答案 1 :(得分:0)

您可以获得一个查询集,其中包含所有与特定Contact对象相关的Partner对象,如下所示:

related_contacts = Contact.objects.filter(partner="pk of Partner model you want all the contacts of")