Найти - Пользователи
Полная версия: Конфликт в моделях.
Начало » Django » Конфликт в моделях.
1
I159
Экспериментирую с моделями. При валидации модели выводится ошибка:
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)
regall
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 можно получить доступ так:
CarModel.make_model
CarModel.car_model
I159
Понятно, работает. Спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB