簡體   English   中英

如何根據從另一個表數據中獲取的id獲取表數據(包括子表和子子數據)? Django

[英]How to get table data (including child table and sub child data) based on id which obtains from another table data? 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 = 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 的子 class,我們可以做什么來訪問數據?

我想我會把所有數據都放在一個變量中,我們應該將它分開並加上他們的Vehicle

你不必。 Django可以反向讀取ForeignKey關系。 您可以查詢:

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

然后您可以枚舉查詢集,對於每個Vehicle object,使用.vehiclepart_set.all()訪問它。 例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM