Django:3 个模型之间的关系

问题描述 投票:0回答:1

我正在为建筑公司开发一个应用程序,我想创建我们的每日时间表。对于这个问题,我有 3 个模型 Date、Construction_site 和 Machinery。我们每天都在多个建筑工地工作,每个 CS 有 3-4 台机器/车辆。

我想要得到这样的东西,但我被模型之间的关系所困扰。

2023-09-21
Construction site 1
Excavator 1
Excavator 2
Truck 1
Construction site 2
Excavator 3
Excavator 4
Truck 2
Construction site 3
Buldozer
Truck 3

2023-09-22
Construction site 1
Excavator 1
Excavator 2
Truck 1
Construction site 2
Excavator 3
Truck 2
Construction site 3
Buldozer
Excavator 4
Truck 3

简化模型:

class Date(models.Model):
    date = models.DateField()

class Construction_site(models.Model):
    construction_site_name = models.CharField(max_length=50)
    date = models.ManyToManyField(Date)

class Machinery(models.Model):
    machine_name = models.CharField(max_length=50)
    construction_site_name = models.ManyToManyField(Construction_site)

一旦我的模型正确,我需要创建一个视图来显示特定日期的所有建筑工地和使用过的机械。

def date(request):
    date = Date.objects.get(id=1)
    construction_sites = date.construction_site_set.all()

这将返回特定日期的所有建筑工地,但我无法获得二手机械。

我对 Django 相当陌生,所以欢迎任何帮助。

python django django-models many-to-many
1个回答
0
投票

您按以下关系进行过滤:

def date(request):
    matchinery = Machinery.objects.filter(construction_site_name__date__pk=1)
    # …

注意:A

ForeignKey
not 存储字符串表示形式(或名称) 列中引用的对象,它存储它的记录的主键 列中带有
_id
后缀的引用指向
ForeignKey
字段。所以
ForeignKey
通常
_name
后缀结尾。你可能想要 考虑将
construction_site_name
字段重命名为
construction_sites

© www.soinside.com 2019 - 2024. All rights reserved.