Forgot about ModelChoise.
Thank you.

On Sunday, 14 June 2015 22:37:26 UTC+3, Tom Evans wrote:
>
> On Sun, Jun 14, 2015 at 3:24 PM, Mark Nesterovych 
> <m.nest...@gmail.com <javascript:>> wrote: 
> > Hello. 
> > I've just finished small django site, and keep going on creating tests. 
> > I've found and issue with Model.objects.values_list  method. 
> > Looks like it disregard test database and looks into production one. 
> > 
> > Some details. 
> > I have a form with a filed customer = 
> > forms.ChoiseField(choises=Customer.objects.values_list('id', 'name')) 
> > 
> > When this form initing during tests, it loads data from production 
> database. 
> > 
> > My test looks like this. 
> > class CustomerFormTest(TestCase): 
> >     def setUp: 
> >          self.customer = Customer.objects.create(name='test name') 
> > 
> >     def test_form_creation(self): 
> >         form = CustomerLoginForm() 
> >         self.assertIn('test name', form.as_ul()) 
> > 
> > 
> > Assertion fails, and when I printing form content, I see select widget 
> with 
> > options from production database objects. 
> > 
> > Can somebody confirm it's a bug ? 
> > Thank you. 
>
> It's not a bug. You are specifying the choices when the form is 
> defined, and at that point there is nothing in the database and so the 
> form has no choices. Since the field is never redefined in the form, 
> the choices will be whatever existed in the database when the form is 
> defined, which is a bad way of designing the form. 
>
> Typically, when your choices are instances of a model, you would not 
> use ChoiceField, but ModelChoicefield. ModelChoiceField takes a 
> queryset when defining the form, and avoids evaluating the queryset 
> until the form is instantiated, which avoids the issue. The 
> documentation also explains how you can specify the queryset more 
> dynamically if that is required. 
>
> https://docs.djangoproject.com/en/1.8/ref/forms/fields/#modelchoicefield 
>
> (I'm assuming that the typo "choises" is only present in your email, 
> and your code correctly says "choices" and "ChoiceField") 
>
> Cheers 
>
> Tom 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/64b6f961-3ad5-4b06-ac35-a5590c9c1de5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to