J'ai obtenu les modèles (pertinents) suivants. fournitures est un champ de plusieurs-à-plusieurs.L'enregistrement du champ m2m dans Django Admin échoue avec "ValueError: doit avoir une valeur avant que cette relation many-to-many puisse être utilisée"
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
Table intermédiaire:
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`);
L'ensemble des choses montre parfaitement dans le Django admin avec filter_horizontal
. Mais quand j'essaie d'enregistrer un nouveau "Fabricant", je reçois: ValueError: "<Manufacturer: thisIsTheManufacturerName>" needs to have a value for field "manufacturer" before this many-to-many relationship can be used.
Je suppose par "fabricant" le champ manufacturer_id
de la table intermédiaire est la cause de l'erreur. Je suis perdu ...
Histoire Lorsque j'ai conçu ma mise en page de base de données, je ne savais pas que Django pouvait gérer les relations m2m lui-même. J'ai donc commencé avec un modèle m2m défini avec through
. J'ai eu la même erreur. J'ai donc supprimé mon modèle, table DB et a couru manage.py syncdb
. Ensuite, Django a créé la table intermédiaire elle-même. Parce que j'ai changé de nouveau, j'ai posté la disposition de la table intermédiaire, juste pour exclure les erreurs.
Qu'est-ce que sql personnalisé? Est-ce le vôtre? Si oui, où avez-vous vu que quelque chose comme ça est nécessaire? Avez-vous lu le moindre détail de la documentation de Django? – rantanplan
J'ai ajouté une note expliquant pourquoi j'ai ajouté la présentation DB. J'ai lu la documentation 1.5 sur m2m, parmi beaucoup d'autres articles de forum, blogs et questions de Stack Overflow. – weeheavy
Essayez de supprimer la base de données entière, 'syncdb' et réessayez. – rantanplan