У меня были следующие (релевантные) модели. поставки - это много-много поле.Сохранение поля m2m в Django Admin с ошибкой «ValueError: должно иметь значение до того, как это отношение« многие ко многим »можно использовать»
class Supplies(models.Model):
id = models.IntegerField(primary_key=True, editable=False)
name_html = models.CharField(max_length=100L)
name_verbose = models.CharField(max_length=150L)
class Meta:
db_table = u'supplies'
def __unicode__(self):
return self.name_html
class Manufacturer(models.Model):
id = models.IntegerField(primary_key=True, editable=False)
name = models.CharField(max_length=135)
country = models.ForeignKey(Country)
supplies = models.ManyToManyField(Supplies, blank=True)
class Meta:
db_table = u'manufacturer'
def __unicode__(self):
return self.name
return self.country
Посредник стол:
CREATE TABLE IF NOT EXISTS `manufacturer_supplies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`manufacturer_id` int(11) NOT NULL,
`supplies_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `manufacturer_id` (`manufacturer_id`),
KEY `supplies_id` (`supplies_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=174 ;
ALTER TABLE `manufacturer_supplies`
ADD CONSTRAINT `manufacturer_supplies_ibfk_3` FOREIGN KEY (`supplies_id`) REFERENCES `supplies` (`id`),
ADD CONSTRAINT `manufacturer_supplies_ibfk_2` FOREIGN KEY (`manufacturer_id`) REFERENCES `manufacturer` (`id`);
Целые вещи проявляется совершенно в Django администратора с filter_horizontal
. Но когда я пытаюсь сохранить новый «Изготовитель», я получаю: ValueError: "<Manufacturer: thisIsTheManufacturerName>" needs to have a value for field "manufacturer" before this many-to-many relationship can be used.
Я полагаю, что «изготовителем» является поле manufacturer_id
из таблицы посредников. Я довольно потерял ...
История Когда я разработал свою схему базы данных, я не знал, что Django может справиться сам m2m отношения. Итак, я начинаю с модели m2m, определенной с through
. У меня такая же ошибка. Поэтому я удалил свою модель, таблицу DB и запустил manage.py syncdb
. Затем Django создал таблицу посредников. Поскольку я снова переключился, я разместил таблицу промежуточных таблиц, чтобы исключить ошибки.
что такое, что пользовательские SQL? Это твое? Если да, то где вы видели, что нужно что-то подобное? Вы читали даже мельчайшие детали документации django? – rantanplan
Я добавил примечание, почему я добавил макет БД. Я прочитал 1.5 документацию о m2m, среди многих других сообщений на форуме, в блогах и вопросах переполнения стека. – weeheavy
Попробуйте удалить всю базу данных 'syncdb' и повторите попытку. – rantanplan