В следующей модели:
class header(models.Model):
title = models.CharField(max_length = 255)
created_by = models.CharField(max_length = 255)
def __unicode__(self):
return self.id()
class criteria(models.Model):
details = models.CharField(max_length = 255)
headerid = models.ForeignKey(header)
def __unicode__(self):
return self.id()
class options(models.Model):
opt_details = models.CharField(max_length = 255)
headerid = models.ForeignKey(header)
def __unicode__(self):
return self.id()
Если существует строка в базе данных для заголовка таблицы как Id=1, title=value-mart , createdby=CEO
Как делают меня условия запроса и таблицы опций для получения всех значений, связанных с таблицей id=1 заголовка
Также может кто-то предлагать хорошую ссылку для примеров запросов.
Прежде всего, не используйте id
в именах, потому что это сбивает с толку. Это поле не идентификатор, это сам объект. (Если у вас есть поле ref
, оно автоматически создает поле ref_id
)
options.objects.filter(header=a_header)
Вы запрашиваете его как любое значение, где некоторый экземпляр заголовка является значением, по которому вы фильтруете.
Я бы посоветовал попробовать нам стиль кодирования и соглашение об именах, которое больше похоже на то, что вы видите в документации Django для Модели . Что-то вроде этого:
class Header(models.Model):
...
class Criteria(models.Model):
details = model.CharField(max_length=255)
header = models.ForeignKey(Header)
И затем запросите их по мере необходимости:
# find Criteria for a given header
value_mart = Header.objects.get(id=1)
# ... via an instance of Header.
value_mart.criteria_set.all()
# ... or with a filter().
Criteria.objects.filter(header=value_mart)
Criteria.objects.filter(header_id=1)
В документации для отношений многие-к-одному также есть ссылки на пример использования .
Ironfroggy прав, но есть другой более очевидный способ получить соответствующие объекты options
и критерии
. Django автоматически создает «обратную связь» для каждого внешнего ключа, указывающего на модель, обычно это имя связанной модели плюс _set
. Итак:
mycriteria.options_set.all()
mycriteria.header_set.all()
предоставит вам все объекты options
и header
, связанные с критериями
объектом mycriteria
.
Также примечание о стиле: как указал Ironfroggy, вы не должны использовать id
в полях внешнего ключа, но также вы должны использовать стиль с заглавными буквами для своих классов моделей, чтобы вы могли видеть разница между критериями класса
и конкретным экземпляром критериев
.
Что касается ссылок, документация Django превосходна и объясняет все это.
Похоже, вы ищете следующих отношений "в обратном направлении" .
Вы можете получить объект заголовка, по которому хотите выполнить фильтрацию, и использовать что-то вроде
obj = Header.objects.get(title="value-mart", "createdby=CEO")
obj.criteria_set.all()