0

对于具有多对多字段的模型,我认为我没有正确填充数据。我想创建一个带有星期几的模型,以便人们可以选择他们想要接收邮件通知的任何日期。生成的 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;

对我的问题有任何见解吗?非常感谢。

4

0 回答 0