Запросы Внешнего ключа Django

В следующей модели:

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 заголовка

Также может кто-то предлагать хорошую ссылку для примеров запросов.

10
задан StephenTG 29 September 2016 в 15:19
поделиться

4 ответа

Прежде всего, не используйте id в именах, потому что это сбивает с толку. Это поле не идентификатор, это сам объект. (Если у вас есть поле ref , оно автоматически создает поле ref_id )

options.objects.filter(header=a_header)

Вы запрашиваете его как любое значение, где некоторый экземпляр заголовка является значением, по которому вы фильтруете.

9
ответ дан 3 December 2019 в 14:00
поделиться

Я бы посоветовал попробовать нам стиль кодирования и соглашение об именах, которое больше похоже на то, что вы видите в документации 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)

В документации для отношений многие-к-одному также есть ссылки на пример использования .

4
ответ дан 3 December 2019 в 14:00
поделиться

Ironfroggy прав, но есть другой более очевидный способ получить соответствующие объекты options и критерии . Django автоматически создает «обратную связь» для каждого внешнего ключа, указывающего на модель, обычно это имя связанной модели плюс _set . Итак:

mycriteria.options_set.all()
mycriteria.header_set.all()

предоставит вам все объекты options и header , связанные с критериями объектом mycriteria .

Также примечание о стиле: как указал Ironfroggy, вы не должны использовать id в полях внешнего ключа, но также вы должны использовать стиль с заглавными буквами для своих классов моделей, чтобы вы могли видеть разница между критериями класса и конкретным экземпляром критериев .

Что касается ссылок, документация Django превосходна и объясняет все это.

20
ответ дан 3 December 2019 в 14:00
поделиться

Похоже, вы ищете следующих отношений "в обратном направлении" .

Вы можете получить объект заголовка, по которому хотите выполнить фильтрацию, и использовать что-то вроде

obj = Header.objects.get(title="value-mart", "createdby=CEO")
obj.criteria_set.all()

См. Документацию для получения более подробной информации

5
ответ дан 3 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: