Как получить данные таблицы на основе 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.

.
Вернуться на верх