对于具有多对多字段的模型,我认为我没有正确填充数据。我想创建一个带有星期几的模型,以便人们可以选择他们想要接收邮件通知的任何日期。生成的 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)
表格显示正确,即出现星期几的复选框。当我选择这些框并点击提交时,一切看起来都很好。但是如果我再次选择表单,复选框都是空的。我更改的表单的其他字段已正确保存。
我想也许我看到了一个问题。这是为 days 模型创建的 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;
对我的问题有任何见解吗?非常感谢。