如何在 Django manytomanyfield 中访问生成的表字段



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 FilestestFolder                               | lab0128 | ananagra | SDX55  | crash     |             | In Progress | 2020_02_12_T_17_45_04 | f          |                        |          2
19 | C:My FilestestFolder                               | 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。在输入表单时,我选择了CDMA的场景(例如睡眠(字段之一(因为CDMA指向所有5个场景,可以从pages_tech_scenario表中看到(。

如何仅从 CDMA 检索睡眠场景,而不是它指向的所有场景?

如何通过指定tech_id和scenes_id从pages_tech_scenario获取 id?

您可以从 UserLog 中命名该字段:

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

这样,您可以通过tech_id而不是tech_id_id来引用 id

如何仅从CDMA检索睡眠场景而不是所有 它所指向的场景?。

UserLog.objects.get(pk=1).tech.scenario.get(name="sleep")

如何通过指定pages_tech_scenario tech_id和 scenes_id?。

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

相关内容

  • 没有找到相关文章

最新更新