Django Models Выбор модели автомобиля на основе марки автомобиля
Я новичок в Django и пытаюсь создать сайт объявлений о продаже автомобилей. Я уже столкнулся с проблемами с моделями. Я не могу понять, как создать модель, в которой при выборе определенной марки (например, Dodge) можно выбрать модель, связанную с этой маркой (например, Charger, Challenger, Viper и т.д.)
models.py
class Make(models.Model):
make = models.CharField('Make', max_length=150)
class Meta:
ordering = ['make']
unique_together = ["make"]
verbose_name_plural = "Manufacturers"
def __str__(self):
return self.make
class CarModel(models.Model):
year = models.IntegerField(default=datetime.datetime.today().year)
make = models.ForeignKey(Make, on_delete=models.CASCADE)
model = models.CharField('Model', max_length=150)
trim = models.CharField('Trim', max_length=150, help_text='Trim level')
class Meta:
ordering = ['make', 'model', 'trim', 'year']
unique_together = ("year", "make", "model", "trim")
verbose_name_plural = "Models"
def __str__(self):
return f' {self.year} {self.make} {self.model} {self.trim}'
class CarListing(models.Model):
content = models.FileField("Media")
make = models.ForeignKey(Make, on_delete=models.CASCADE)
make_model = models.ForeignKey(CarModel, on_delete=models.CASCADE)
class Meta:
ordering = ['make_model']
verbose_name_plural = "Car Listings"
def __str__(self):
return f' {self.make_model.year} {self.make_model.make} {self.make_model.model}
{self.make_model.trim} '
Используйте related_name
для обратной совместимости.
class CarModel(models.Model):
year = models.IntegerField(default=datetime.datetime.today().year)
make = models.ForeignKey(Make, on_delete=models.CASCADE, related_name="models") # Note the related name here
model = models.CharField('Model', max_length=150)
trim = models.CharField('Trim', max_length=150, help_text='Trim level')
Потом, когда у вас есть связанное имя, вы можете легко получить к нему доступ, вызвав models
на экземпляре
make = Make.objects.get(make="Dodge")
print(make.models) # Viper, Charger, Challenger, etc.
Примечание: make = Make.objects.get(make="Dodge")
при наличии нескольких записей с одинаковым запросом будет выдана ошибка.
Итак, вы должны сделать что-то вроде этого:
make = Make.objects.filter(make="Dodge")
# возвращаем список записей`
Так что я попробовал изменения, но всякий раз, когда я пытаюсь "создать объявление" ...
Я все еще могу выбирать модели других производителей автомобилей