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") # возвращаем список записей`

Так что я попробовал изменения, но всякий раз, когда я пытаюсь "создать объявление" ...

Я все еще могу выбирать модели других производителей автомобилей

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