Django один ко многим получают все основные записи - PullRequest
0 голосов
/ 28 апреля 2020

Я создаю приложение django с базой данных, включающей следующие таблицы: enter image description here

Я создал модели следующим образом:

class Group(models.Model):
    id = models.AutoField(primary_key=True, editable=False)
    text = models.CharField(db_column='Text', max_length=4000)

    class Meta:
        db_table = 'Group'


class Filters(models.Model):
    id = models.AutoField(primary_key=True, editable=False)
    text = models.CharField(db_column='Text', max_length=4000)
    group_id = models.ForeignKey(Group, on_delete=models.CASCADE,
                                 db_column='GroupId')

    class Meta:
        db_table = 'Filters'

Цель состоит в том, чтобы вызвать конечную точку и вернуть список со всеми группами и базовыми фильтрами. Возможно ли этого добиться? Если возможно, я хочу это в классе Serializer.

Я знаю, что могу получить группу записей фильтра, но возможно ли это в противном случае?

1 Ответ

1 голос
/ 28 апреля 2020
class Group(models.Model):
    id = models.AutoField(primary_key=True, editable=False)
    text = models.CharField(db_column='Text', max_length=4000)

    class Meta:
        db_table = 'Group'


class Filters(models.Model):
    id = models.AutoField(primary_key=True, editable=False)
    text = models.CharField(db_column='Text', max_length=4000)
    group = models.ForeignKey(Group, on_delete=models.CASCADE,
                                 db_column='GroupId', related_name='filters') # not group_id

Это просто говорит, что у Filters есть .group, а в группе есть .filters (related_name). Если вы не указали related_name, по умолчанию это будет model_qs, поэтому должно быть filters_qs.

Некоторые дополнительные примечания

  • Имена классов должны быть единственного числа

  • Django создает множественные имена, добавив 's', в вашем случае это создаст filterss, и вам нужно будет указать verbose_name_plural (более бесполезный код)

  • Вам не нужно указывать данные БД, имена столбцов или что-то еще, если вы не воссоздаете бэкэнд, который уже существует, или что-то, что нуждается в этом.

  • Это группа, а не group_id. Все мы знаем, что в SQL это group_id, однако, это python, и у вас есть доступ ко всему экземпляру группы, тогда вы instance.id или instance.pk, чтобы получить его.
...