forked from KristianOellegaard/django-hvad
-
Notifications
You must be signed in to change notification settings - Fork 2
/
limit_choices_to.py
61 lines (47 loc) · 2.05 KB
/
limit_choices_to.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# -*- coding: utf-8 -*-
from django.contrib import admin
from django.contrib.auth.models import User
from nani.test_utils.testcase import NaniTestCase
from nani.test_utils.fixtures import TwoTranslatedNormalMixin
from testproject.app.models import LimitedChoice
class LimitChoicesToTests(NaniTestCase, TwoTranslatedNormalMixin):
def create_fixtures(self):
su = User(
email='admin@admin.com',
is_staff=True,
is_superuser=True,
is_active=True,
username='admin',
)
su.set_password('admin')
su.save()
self.user = su
super(LimitChoicesToTests, self).create_fixtures()
def test_limit_choices_to(self):
"""
Checks if limit_choices_to works on ForeignKey and ManyToManyField.
"""
limited_choice_admin = admin.site._registry[LimitedChoice]
with self.login_user_context(
username='admin',
password='admin'
):
rf = self.request_factory
get_request = rf.get('/admin/app/limitedchoice/add')
# We need to attach the client's session to the request,
# otherwise admin won't let us in
get_request.session = self.client.session
# in django 1.4 request.user is required
get_request.user = self.user
# Let's construct the relevant admin form...
Form = limited_choice_admin.get_form(get_request)
form = Form()
# ...and see if the ForeignKey field's queryset contains valid
# choices only.
qs_fk = form.fields['choice_fk'].queryset
self.assertTrue(qs_fk.filter(shared_field='Shared1').exists())
self.assertFalse(qs_fk.filter(shared_field='Shared2').exists())
# Now do the same for the ManyToManyField.
qs_mm = form.fields['choice_mm'].queryset
self.assertTrue(qs_mm.filter(shared_field='Shared2').exists())
self.assertFalse(qs_mm.filter(shared_field='Shared1').exists())