manytomany フィールドを持つモデルの場合、データを適切に入力していないと思います。ユーザーがメール通知を受け取りたい曜日を選択できるように、曜日を含むモデルを作成したかったのです。結果として生成された html は正しいように見えます。つまり、チェックボックスの日を選択できますが、下部の送信をクリックすると、曜日の選択ではなく、他のすべてのフィールドのみがデータベースに適切に保存されます。データモデルの方法に関して、私は非常に単純な間違いを犯していると確信しています。しかし、私はそれを見ることができません。以下は機能するはずですか?曜日のモデルは次のとおりです。
DAYS_OF_WEEK = (
('1', 'Monday'),
('2', 'Tuesday'),
('3', 'Wednesday'),
('4', 'Thursday'),
('5', 'Friday'),
('6', 'Saturday'),
('7', 'Sunday'),
)
class Days(models.Model):
days = models.CharField(max_length=1, choices=DAYS_OF_WEEK)
日を参照するメール通知モデルの部分:
class Preferences(models.Model):
user = models.ForeignKey(User)
mail_days = models.ManyToManyField(Days)
日付が選択されるフォームの部分は次のとおりです。
DAYS_OF_WEEK = (
('1', 'Monday'),
('2', 'Tuesday'),
('3', 'Wednesday'),
('4', 'Thursday'),
('5', 'Friday'),
('6', 'Saturday'),
('7', 'Sunday'),
)
mail_days = forms.MultipleChoiceField(required=False,
widget=CheckboxSelectMultiple, choices=DAYS_OF_WEEK)
フォームは正しく表示されます。つまり、曜日のチェックボックスが表示されます。ボックスを選択して送信すると、すべて問題ないように見えます。しかし、フォームをもう一度選択すると、チェックボックスはすべて空になります。私が変更したフォームの他のフィールドは、適切に保存されます。
おそらく問題があると思います。日モデル用に作成される SQL データベース テーブルを次に示します。空っぽです。何も入力されていません。そうではないでしょうか?
CREATE TABLE `myapp_days` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`days` varchar(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
LOCK TABLES `todo_days` WRITE;
UNLOCK TABLES;
選択した日は、myapp_preferences_my_days というテーブルに保存されます。
CREATE TABLE `myapp_preferences_mail_days` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`preferences_id` int(11) NOT NULL,
`days_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `preferences_id` (`preferences_id`,`days_id`),
KEY `myapp_preferences_mail_days_2d9474d5` (`preferences_id`),
KEY `myapp_preferences_mail_days_96c2dc77` (`days_id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;
LOCK TABLES `myapp_preferences_mail_days` WRITE;
INSERT INTO `myapp_preferences_mail_days` VALUES (15,1,6),(14,1,4),(13,1,5);
UNLOCK TABLES;
私の問題に対する洞察はありますか?どうもありがとう。