On Sun, Jun 14, 2015 at 3:24 PM, Mark Nesterovych
<m.nesterov...@gmail.com> 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/CAFHbX1LerMfvVs056hVnFY8Jqm0gqtLDm0wcpWqgjC4V88fpBg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to