Django - Получить переменную в соединительной таблице - ManyToManyField - PullRequest
0 голосов
/ 27 января 2020

Я использую Django с базой данных MySQL и создаю свои модели с python manage.py inspectdb ... но хорошо известной проблемой является управление таблицей соединений (nn). Django предложить объект ManyToManyField, но я застрял, указав c проблему ...

Модели

class A(models.Model):
    id_A = models.AutoField(db_column='idA', primary_key=True)
    to_B = models.ManyToManyField(
        'B',
        through='A_has_B',
    )

class B(models.Model):
    id_B = models.AutoField(db_column='idB', primary_key=True)
    to_A = models.ManyToManyField(
        A,
        through='A_has_B',
    )

class A_has_B(models.Model):
    A_id_A = models.ForeignKey(A, models.DO_NOTHING, db_column='A_idA')
    B_id_B = models.ForeignKey(B, models.DO_NOTHING, db_column='B_idB')
    variable_i_want = models.CharField(db_column='variable_i_want', max_length=45)

Пример case

I l oop my A объектная модель как это:

for a in A.objects.all():
    # Here i want to get the variable : variable_i_want
    variable_i_want = ?????????

1 Ответ

1 голос
/ 27 января 2020

Вы можете получить все связанные A_has_B объекты, используя обратную связь:

for a in A.objects.all():
    a_has_b_list = a.a_has_b_set.all()  # return all related objects
    for a_has_b in a_has_b_list:  
        variable_i_want = a_has_b.variable_i_want 

Обратите внимание, что A_id_A = models.ForeignKey(A, models.DO_NOTHING, db_column='A_idA') создает менеджер обратной связи , к которому вы можете обращаться из A объекта. По умолчанию имя этого атрибута обратной связи - это название модели в любовном регистре с добавлением _set префикса a_has_v_set в вашем случае. Но вы можете контролировать это имя, используя related_name аргумент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...