Как получить данные таблицы на основе id, который берется из данных другой таблицы? Django
Виды
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 = Vehicles.objects.filter(id=vehicles.vehicle_id) # Not Working
Как получить данные из таблиц, чьи множественные идентификаторы получены другой таблицей?
Модели
class Company(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
slug = models.SlugField(blank=True, null=True, unique=True)
description = models.TextField()
class Vehicles(models.Model):
id = models.AutoField(primary_key=True)
vehicle_number = models.IntegerField()
name = models.CharField(max_length=255)
slug = models.SlugField(blank=True, null=True, unique=True)
class CompanyContainVehicles(models.Model):
id = models.AutoField(primary_key=True)
company_id = models.ForeignKey(Company, on_delete=models.CASCADE)
vehicle_id = models.ForeignKey(Vehicles, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, blank=True)
Выше приведены детали моей таблицы, и мне нужно получить все автомобили из таблицы Vehicles, которая получена из таблицы CompanyContainVehicle (которая определяет, какая компания извлекает какой автомобиль) на основе company_id, полученного из таблицы Company, которая содержит детали компаний.
Вы можете фильтровать с помощью:
Vehicles.objects.filter(companycontainvehicles__company_id=company_id)
Здесь ваш companycontainvehicles
в основном действует как ManyToManyField
. Вы можете создать отношение "многие ко многим" между Vehicle
и Company
с помощью:
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)
Затем вы можете фильтровать с помощью:
Vehicle.objects.filter(companies=company_id)
Примечание: обычно модели Django дается сингулярное имя, поэтому
Vehicle
вместо.Vehicles
Примечание: Обычно не добавляют суффикс
._id
к полюForeignKey
, так как Django автоматически добавит поле-"близнец" с суффиксом_id
. Поэтому он должен бытьcompany
, вместо.company_id