与问题的全科是在这里:如何正确将表中的数据加载到表单中?
https://github.com/bethlakshmi/GBE2/tree/GBE-459
的问题是:
首先 - 我有需要在一个给定的数据对象有效的项目形式:
from [EventScheduleForm][1]:
class EventScheduleForm(forms.ModelForm):
required_css_class = 'required'
error_css_class = 'error'
day = forms.ChoiceField(choices=conference_days)
time = forms.ChoiceField(choices=conference_times)
location = forms.ChoiceField(choices=[
(loc, loc.__str__()) for loc in
LocationItem.objects.all().order_by('room__name')])
duration = DurationFormField(
help_text=scheduling_help_texts['duration'])
...
下一步 - 我有一个单元测试,通过夹具播种一些房间对象,然后尝试提交到表单:
class TestEditEvent(TestCase):
'''Tests for edit_event view'''
''' Fixture to create some rooms, location items, and resource items '''
fixtures = ['scheduler/fixtures/rooms.json']
def setUp(self):
self.factory = RequestFactory()
self.s_event = factories.SchedEventFactory.create()
self.profile_factory = factories.ProfileFactory
self.client = Client()
self.room = Room.objects.all().order_by('name').first()
self.s_event.set_location(self.room)
...
def test_edit_event_submit_succeed(self):
'''edit event post succeeds without errors'''
profile = self.profile_factory.create()
form_post = self.get_edit_event_form()
request = self.factory.post('/scheduler/create/GenericEvent/%d' %
self.s_event.pk,
form_post)
request.user = profile.user_object
functions.grant_privilege(profile, 'Scheduling Mavens')
rooms = Room.objects.all().order_by('name')
for loc in rooms:
print "Room:" + loc.__str__() + "| \n"
response = edit_event(request, self.s_event.pk, "GenericEvent")
self.assertEqual(response.status_code, 200)
print(response.content)
self.assertFalse('<font color="red">!</font>' in response.content)
self.assertTrue(form_post['title'] in response.content)
self.assertTrue(form_post['description'] in response.content)
我发现的是代码行:
location = forms.ChoiceField(choices=[
(loc, loc.__str__()) for loc in
LocationItem.objects.all().order_by('room__name')])
失败。它的行为好像没有房间,但打印声明显示房间已正确设置并在单元测试中看到。
这条线有什么问题?是否有更好的/不同的方式来加载房间的选择列表,将工作不同?
它在集成中起作用 - 但我们遇到了麻烦,因为我们必须重新启动数据库或者修改它以使代码的这部分能够正常工作 - 所以关于它如何从数据库中提取。
其他说明: - Django的1.6 & 1.6.5 - SQL精简版和MySQL - 的Linux/Mac的 - Apache和本地Django的服务器
一直是我的基线