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