Форум сайта python.su
Экспериментирую с моделями. При валидации модели выводится ошибка:
oneapp.car: Accessor for field ‘engine’ clashes with related field ‘CarModel.car_set’. Add a related_name argument to the definition for ‘engine’.Такая же ситуация и в полях ‘car-model’, ‘body’, ‘transmission’ и ‘year’. Почему возникает конфликт? Что за related_name и куда его добавить? (Выкладываю не все модели, а только конфликтующую часть)
class CarModel(models.Model):
car_model = models.CharField(max_length = 24)
body_type = models.ManyToManyField(Body)
engine_type = models.ManyToManyField(Engine)
transmission = models.ManyToManyField(Transmission)
year = models.ManyToManyField(Year)
class Make(models.Model):
make = models.CharField(max_length = 24)
car_model = models.ManyToManyField(CarModel)
class Car(models.Model):
make = models.ForeignKey(Make)
car_model = models.ForeignKey(CarModel)
body = models.ForeignKey(CarModel)
engine = models.ForeignKey(CarModel)
transmission = models.ForeignKey(CarModel)
year = models.ForeignKey(CarModel)
Офлайн
related_name - это имя, по которому можно обратно получить доступ к описываемому объекту из связанного объекта, например, по ForeignKey.
У вас одинаковое имя встречается два раза. Так нельзя, им надо давать разные имена, потому что возник конфликт одинаковых related_name в CarModel, он не знает, какой класс ему брать при выборке. Например:
class Car(models.Model):
car_model = models.ForeignKey(CarModel, related_name="car_model")
...
class Make(models.Model):
car_model = models.ForeignKey(CarModel, related_name="make_model")
CarModel.make_model
CarModel.car_model
Офлайн
Понятно, работает. Спасибо
Офлайн