0

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;

私の問題に対する洞察はありますか?どうもありがとう。

4

0 に答える 0