我在Django中有两种内联表单的表单。其中之一是让我悲伤。 我的模型是这样的。Django使用optgroup选择选项无法验证
class BookingActivity(models.Model):
booking = models.ForeignKey('Booking')
program = models.ForeignKey(Program)
activity = models.ForeignKey(Activity, choices=programs_as_optgroups())
的activity
ForeignKey的选择是通过这种方法产生的:
def programs_as_optgroups():
activities = []
programs = []
for program in Program.objects.all():
new_program = []
new_activities = []
for activity in Activity.objects.filter(program=program):
new_activities.append([activity.id, activity.name])
new_program = [program.name, new_activities]
activities.append(new_program)
return activities
我想<optgroup>
标签添加到我的ForeignKey
选择这是工作。但是当我提交表格时,我收到一个错误:Cannot assign "u'3'": "BookingActivity.activity" must be a "Activity" instance.
这有些道理 - 有点。但是,如果我检查从表单发送的数据request
。随着选择在建立或不我得到相同的值,即
activity = models.ForeignKey(Activity, choices=programs_as_optgroups())
和
activity = models.ForeignKey(Activity)
无论从形式返回一个u'3'
。但我不明白为什么只有在使用optgroup时才会出现错误。
你猜对了。虽然你正在阅读的内容仍然是正确的,因为'活力'只会是通过__unicode__方法在选择选项中的标题。我会尽快更新我的代码。 – sdk900 2011-04-18 02:52:57
@ sdk900也许你应该把它放在你的init方法后超级...对我来说这看起来很重要。 – 2011-04-18 03:01:51
是的,这是问题,但因为我愚蠢地把我的'__init__'方法放在我的'Meta'类之前,我假设它是因为它具有表单的'model',正在覆盖更新的字段。虽然我曾尝试在modelForm中改变字段,像这样的'activity = forms.ChoiceField(choices = programs_as_optgroups())',它给了我与上面相同的错误。 – sdk900 2011-04-18 03:43:11