次の(関連する)モデルを取得しました。供給は多対多フィールドです。
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 Admin では、すべてが完全に表示され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 は中間テーブル自体を作成しました。もう一度切り替えたので、エラーを除外するために、中間のテーブル レイアウトを投稿しました。