如何根据从其他表数据中获取的id获取表数据(包括子表和子表数据)?姜戈



视图

company = Company.objects.get(id = company_id)  # getting input from django urls (<int:company_id>)
vehicles = CompanyContainVehicles.objects.filter(company_id=company.id)  # Give all rows having same id (company.id)
all_vehicles = Vehicle.objects.filter(companies=company)  # Gives all row with id provide by company
all_vehicles_parts = VehiclePart.objects.filter(__________) # Not Working

模型

class Company(models.Model):
name = models.CharField(max_length=255)
slug = models.SlugField(blank=True, null=True, unique=True)
description = models.TextField()
class Vehicle(models.Model):
vehicle_number = models.IntegerField()
name = models.CharField(max_length=255)
slug = models.SlugField(blank=True, null=True, unique=True)
companies = models.ManyToManyField(
Company,
through='CompanyVehicle',
related_name='companies'
)
class CompanyVehicle(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
class VehiclePart(models.Model):
id = models.AutoField(primary_key=True)
vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
type = models.ForeignKey(PartType, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, blank=True)

如何使用他们的车辆获得VehiclePart?(我想我会在一个变量中给出所有数据,我们应该将其除以并与他们的车辆相加(。此外,如果VehiclePart包含名为VehiclePartDetail的子类,我们该如何访问数据?

我想我会给出一个变量中的所有数据,我们应该将其除以Vehicle

你不必这么做。Django可以反向读取ForeignKey关系。您可以使用进行查询

qs = Vehicle.objects.prefetch_related('vehiclepart_set')

然后可以在查询集上枚举,对于每个Vehicle对象,使用.vehiclepart_set.all()访问它。例如:

for item in qs:
print(vehicle_name)
for part in item.vehiclepart_set.all():
print(part.id)

最新更新