Как получить список всех объектов, связанных с внешним ключом в Django

Не очень опытен с Django, поэтому прошу прощения, если это тривиально. Допустим, у меня есть экземпляр категории, и я хочу получить доступ ко всем объектам контента, которые я ранее добавил к своему внешнему ключу. Как бы я это сделал?

class Organization(models.Model):
    id = models.CharField(primary_key=True, max_length=200, default=uuid4, editable=False, unique=True)
    name=models.CharField(max_length=200,unique=True)
    phoneNumber=models.CharField(max_length=20)
    logo=models.CharField(max_length=100000) # storing this as base 64 encoded
    location=models.CharField(max_length=200)

class Category(models.Model):
    categoryName=models.CharField(max_length=300, unique=True, primary_key=True)
    associatedOrganizations=models.ForeignKey(Organization,on_delete=models.CASCADE,related_name='associatedOrgs',null=True,blank=True)
    associatedContent=models.ForeignKey(Content, on_delete=models.CASCADE,related_name='associatedContent',null=True,blank=True)
    associatedMeetingNotices=models.ForeignKey(MeetingNotice,on_delete=models.CASCADE,related_name='associatedMeetingNotices',null=True,blank=True)

Например: допустим, у меня есть следующее

healthcareCategory=models.Category.objects.get(pk="healthcare")

и я хочу получить доступ ко всем организациям, связанным со здравоохранением, что мне делать?

Это?

healthcareCategory.associatedOrganizations.all()

Вы уже близко. Возможно, вы захотите изменить это связанное имя с associatedOrgs на associatedorgs, чтобы более точно следовать стилю кодирования джанго. В документации по этому поводу есть несколько примеров.

healthcare_category = Category.objects.get(pk="healthcare")
organizations = healthcare_category.associatedorgs.all()

Ответ @AMG является правильным. Если бы вы не определили related_name для associatedOrganizations, вы могли бы просто сделать

organizations = Organization.objects.filter(category__pk='healthcare')

Но я думаю, что есть еще один вопрос. Правильно ли я понимаю, что организация может иметь только одну категорию, а категория может иметь много организаций?

Если да, то я думаю, что ForeignKey в вашей модели находится в неправильном месте.

class Organization(models.Model):
    id = models.CharField(primary_key=True, max_length=200, default=uuid4, editable=False, unique=True)
    name=models.CharField(max_length=200,unique=True)
    phoneNumber=models.CharField(max_length=20)
    logo=models.CharField(max_length=100000) # storing this as base 64 encoded
    location=models.CharField(max_length=200)

    # The ForeignKey should be here:
    category = ForeignKey(Category, on_delete=models.CASCADE)


class Category(models.Model):
    categoryName=models.CharField(max_length=300, unique=True, primary_key=True)
    
    # remove this
    # associatedOrganizations=models.ForeignKey(Organization,on_delete=models.CASCADE,related_name='associatedOrgs',null=True,blank=True)

    ...

ForeignKey является ManyToOneField, поэтому вы помещаете его в модель, которая будет множеством, и связываете его с моделью, которая будет одним.

Теперь вы можете найти все организации в категории "Здравоохранение" следующим образом:

organizations = Organization.objects.filter(category='healthcare')
Вернуться на верх