对于具有多个字段的模型,我认为我没有正确填充数据。我想创建一个包含一周中几天的模型,以便人们可以选择他们想要接收邮件通知的任何日期。生成的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;
对我的问题有什么见解?非常感谢。