Как получить доступ к сгенерированным полям таблицы в Django manytomanyfield - PullRequest
1 голос
/ 13 февраля 2020

py, который выглядит как ниже

class Scenes(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return self.name

class Tech(models.Model):
    tech = models.CharField(max_length=30)
    scenario = models.ManyToManyField('Scenes')

    def __str__(self):
        return self.tech

class UserLog(models.Model):
     tech_id = models.ForeignKey(Tech, on_delete=models.CASCADE)
     ....#other fields

Он генерирует одну дополнительную таблицу с именем pages_tech_scenario (pages - это имя моего приложения)

Мои заполненные таблицы в базе данных (postgres) выглядят как ниже

pages_tech_scenario

 id | tech_id | scenes_id
----+---------+-----------
  1 |       1 |         1
  4 |       2 |         1
  5 |       2 |         2
  6 |       2 |         3
  7 |       2 |         4
  8 |       2 |         5
  9 |       3 |         3
 10 |       4 |         1
 11 |       4 |         2
 12 |       4 |         3

pages_scenes

 id |   name
----+----------
  1 | poweron
  2 | poweroff
  3 | sleep
  4 | wakeup
  5 | switch

pages_tech

id | tech
----+------
  2 | CDMA
  3 | GSM
  4 | 5G
  1 | LTE

pages_userlog

id |                    data_location                     |   pc    | username | target | data_type | description |   status    |    submission_time    | upload_now | string_submission_time | tech_id_id
----+------------------------------------------------------+---------+----------+--------+-----------+-------------+-------------+-----------------------+------------+------------------------+------------
 39 | C:\My Files\testFolder                               | lab0128 | ananagra | SDX55  | crash     |             | In Progress | 2020_02_12_T_17_45_04 | f          |                        |          2
 19 | C:\My Files\testFolder                               | lab0034 | sujaraj  | SDX55  | crash     |             | In Progress | 2020_02_12_T_15_46_59 | f          | 111                    |          1

Здесь, для pages_userlog первая запись id = 39 имеет tech_id_id = 2, что эквивалентно CDMA. При вводе формы я выбрал одно из полей сценария (скажем, sleep ) CDMA (так как CDMA указывает на все 5 сценариев ios, можно увидеть из таблицы pages_tech_scenario ) ,

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

Как получить идентификатор из pages_tech_scenario, указав tech_id и scenes_id?.

1 Ответ

1 голос
/ 13 февраля 2020

Вы можете назвать поле из UserLog:

 tech = models.ForeignKey(Tech, on_delete=models.CASCADE)

Таким образом, вы можете ссылаться на идентификатор по tech_id вместо tech_id_id

Как я могу получить только сценарий сна из CDMA вместо всех сценариев ios, на который он указывает? 1015 *

Tech.scenario.through.objects.get(tech_id=tech_id, scenes_id=scenes_id).id
...