Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
django
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
django
Commits
e744c7e4
Kaydet (Commit)
e744c7e4
authored
Ara 08, 2016
tarafından
Tim Graham
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Imported specific models in a few tests that didn't.
üst
9b79281e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
181 additions
and
166 deletions
+181
-166
tests.py
tests/admin_widgets/tests.py
+79
-76
widgetadmin.py
tests/admin_widgets/widgetadmin.py
+17
-14
tests.py
tests/backends/tests.py
+81
-73
urls.py
tests/generic_views/urls.py
+4
-3
No files found.
tests/admin_widgets/tests.py
Dosyayı görüntüle @
e744c7e4
...
...
@@ -21,7 +21,10 @@ from django.test import SimpleTestCase, TestCase, override_settings
from
django.urls
import
reverse
from
django.utils
import
six
,
translation
from
.
import
models
from
.models
import
(
Advisor
,
Album
,
Band
,
Bee
,
Car
,
Company
,
Event
,
Honeycomb
,
Individual
,
Inventory
,
Member
,
MyFileField
,
Profile
,
School
,
Student
,
)
from
.widgetadmin
import
site
as
widget_admin_site
...
...
@@ -31,8 +34,8 @@ class TestDataMixin(object):
def
setUpTestData
(
cls
):
cls
.
superuser
=
User
.
objects
.
create_superuser
(
username
=
'super'
,
password
=
'secret'
,
email
=
None
)
cls
.
u2
=
User
.
objects
.
create_user
(
username
=
'testser'
,
password
=
'secret'
)
models
.
Car
.
objects
.
create
(
owner
=
cls
.
superuser
,
make
=
'Volkswagen'
,
model
=
'Passat'
)
models
.
Car
.
objects
.
create
(
owner
=
cls
.
u2
,
make
=
'BMW'
,
model
=
'M3'
)
Car
.
objects
.
create
(
owner
=
cls
.
superuser
,
make
=
'Volkswagen'
,
model
=
'Passat'
)
Car
.
objects
.
create
(
owner
=
cls
.
u2
,
make
=
'BMW'
,
model
=
'M3'
)
class
AdminFormfieldForDBFieldTests
(
SimpleTestCase
):
...
...
@@ -67,57 +70,57 @@ class AdminFormfieldForDBFieldTests(SimpleTestCase):
return
ff
def
test_DateField
(
self
):
self
.
assertFormfield
(
models
.
Event
,
'start_date'
,
widgets
.
AdminDateWidget
)
self
.
assertFormfield
(
Event
,
'start_date'
,
widgets
.
AdminDateWidget
)
def
test_DateTimeField
(
self
):
self
.
assertFormfield
(
models
.
Member
,
'birthdate'
,
widgets
.
AdminSplitDateTime
)
self
.
assertFormfield
(
Member
,
'birthdate'
,
widgets
.
AdminSplitDateTime
)
def
test_TimeField
(
self
):
self
.
assertFormfield
(
models
.
Event
,
'start_time'
,
widgets
.
AdminTimeWidget
)
self
.
assertFormfield
(
Event
,
'start_time'
,
widgets
.
AdminTimeWidget
)
def
test_TextField
(
self
):
self
.
assertFormfield
(
models
.
Event
,
'description'
,
widgets
.
AdminTextareaWidget
)
self
.
assertFormfield
(
Event
,
'description'
,
widgets
.
AdminTextareaWidget
)
def
test_URLField
(
self
):
self
.
assertFormfield
(
models
.
Event
,
'link'
,
widgets
.
AdminURLFieldWidget
)
self
.
assertFormfield
(
Event
,
'link'
,
widgets
.
AdminURLFieldWidget
)
def
test_IntegerField
(
self
):
self
.
assertFormfield
(
models
.
Event
,
'min_age'
,
widgets
.
AdminIntegerFieldWidget
)
self
.
assertFormfield
(
Event
,
'min_age'
,
widgets
.
AdminIntegerFieldWidget
)
def
test_CharField
(
self
):
self
.
assertFormfield
(
models
.
Member
,
'name'
,
widgets
.
AdminTextInputWidget
)
self
.
assertFormfield
(
Member
,
'name'
,
widgets
.
AdminTextInputWidget
)
def
test_EmailField
(
self
):
self
.
assertFormfield
(
models
.
Member
,
'email'
,
widgets
.
AdminEmailInputWidget
)
self
.
assertFormfield
(
Member
,
'email'
,
widgets
.
AdminEmailInputWidget
)
def
test_FileField
(
self
):
self
.
assertFormfield
(
models
.
Album
,
'cover_art'
,
widgets
.
AdminFileWidget
)
self
.
assertFormfield
(
Album
,
'cover_art'
,
widgets
.
AdminFileWidget
)
def
test_ForeignKey
(
self
):
self
.
assertFormfield
(
models
.
Event
,
'main_band'
,
forms
.
Select
)
self
.
assertFormfield
(
Event
,
'main_band'
,
forms
.
Select
)
def
test_raw_id_ForeignKey
(
self
):
self
.
assertFormfield
(
models
.
Event
,
'main_band'
,
widgets
.
ForeignKeyRawIdWidget
,
self
.
assertFormfield
(
Event
,
'main_band'
,
widgets
.
ForeignKeyRawIdWidget
,
raw_id_fields
=
[
'main_band'
])
def
test_radio_fields_ForeignKey
(
self
):
ff
=
self
.
assertFormfield
(
models
.
Event
,
'main_band'
,
widgets
.
AdminRadioSelect
,
ff
=
self
.
assertFormfield
(
Event
,
'main_band'
,
widgets
.
AdminRadioSelect
,
radio_fields
=
{
'main_band'
:
admin
.
VERTICAL
})
self
.
assertIsNone
(
ff
.
empty_label
)
def
test_many_to_many
(
self
):
self
.
assertFormfield
(
models
.
Band
,
'members'
,
forms
.
SelectMultiple
)
self
.
assertFormfield
(
Band
,
'members'
,
forms
.
SelectMultiple
)
def
test_raw_id_many_to_many
(
self
):
self
.
assertFormfield
(
models
.
Band
,
'members'
,
widgets
.
ManyToManyRawIdWidget
,
self
.
assertFormfield
(
Band
,
'members'
,
widgets
.
ManyToManyRawIdWidget
,
raw_id_fields
=
[
'members'
])
def
test_filtered_many_to_many
(
self
):
self
.
assertFormfield
(
models
.
Band
,
'members'
,
widgets
.
FilteredSelectMultiple
,
self
.
assertFormfield
(
Band
,
'members'
,
widgets
.
FilteredSelectMultiple
,
filter_vertical
=
[
'members'
])
def
test_formfield_overrides
(
self
):
self
.
assertFormfield
(
models
.
Event
,
'start_date'
,
forms
.
TextInput
,
self
.
assertFormfield
(
Event
,
'start_date'
,
forms
.
TextInput
,
formfield_overrides
=
{
DateField
:
{
'widget'
:
forms
.
TextInput
}})
def
test_formfield_overrides_widget_instances
(
self
):
...
...
@@ -129,9 +132,9 @@ class AdminFormfieldForDBFieldTests(SimpleTestCase):
formfield_overrides
=
{
CharField
:
{
'widget'
:
forms
.
TextInput
(
attrs
=
{
'size'
:
'10'
})}
}
ma
=
BandAdmin
(
models
.
Band
,
admin
.
site
)
f1
=
ma
.
formfield_for_dbfield
(
models
.
Band
.
_meta
.
get_field
(
'name'
),
request
=
None
)
f2
=
ma
.
formfield_for_dbfield
(
models
.
Band
.
_meta
.
get_field
(
'style'
),
request
=
None
)
ma
=
BandAdmin
(
Band
,
admin
.
site
)
f1
=
ma
.
formfield_for_dbfield
(
Band
.
_meta
.
get_field
(
'name'
),
request
=
None
)
f2
=
ma
.
formfield_for_dbfield
(
Band
.
_meta
.
get_field
(
'style'
),
request
=
None
)
self
.
assertNotEqual
(
f1
.
widget
,
f2
.
widget
)
self
.
assertEqual
(
f1
.
widget
.
attrs
[
'maxlength'
],
'100'
)
self
.
assertEqual
(
f2
.
widget
.
attrs
[
'maxlength'
],
'20'
)
...
...
@@ -144,8 +147,8 @@ class AdminFormfieldForDBFieldTests(SimpleTestCase):
"""
class
MemberAdmin
(
admin
.
ModelAdmin
):
formfield_overrides
=
{
DateTimeField
:
{
'widget'
:
widgets
.
AdminSplitDateTime
}}
ma
=
MemberAdmin
(
models
.
Member
,
admin
.
site
)
f1
=
ma
.
formfield_for_dbfield
(
models
.
Member
.
_meta
.
get_field
(
'birthdate'
),
request
=
None
)
ma
=
MemberAdmin
(
Member
,
admin
.
site
)
f1
=
ma
.
formfield_for_dbfield
(
Member
.
_meta
.
get_field
(
'birthdate'
),
request
=
None
)
self
.
assertIsInstance
(
f1
.
widget
,
widgets
.
AdminSplitDateTime
)
self
.
assertIsInstance
(
f1
,
forms
.
SplitDateTimeField
)
...
...
@@ -154,30 +157,30 @@ class AdminFormfieldForDBFieldTests(SimpleTestCase):
formfield_overrides works for a custom field class.
"""
class
AlbumAdmin
(
admin
.
ModelAdmin
):
formfield_overrides
=
{
models
.
MyFileField
:
{
'widget'
:
forms
.
TextInput
()}}
ma
=
AlbumAdmin
(
models
.
Member
,
admin
.
site
)
f1
=
ma
.
formfield_for_dbfield
(
models
.
Album
.
_meta
.
get_field
(
'backside_art'
),
request
=
None
)
formfield_overrides
=
{
MyFileField
:
{
'widget'
:
forms
.
TextInput
()}}
ma
=
AlbumAdmin
(
Member
,
admin
.
site
)
f1
=
ma
.
formfield_for_dbfield
(
Album
.
_meta
.
get_field
(
'backside_art'
),
request
=
None
)
self
.
assertIsInstance
(
f1
.
widget
,
forms
.
TextInput
)
def
test_field_with_choices
(
self
):
self
.
assertFormfield
(
models
.
Member
,
'gender'
,
forms
.
Select
)
self
.
assertFormfield
(
Member
,
'gender'
,
forms
.
Select
)
def
test_choices_with_radio_fields
(
self
):
self
.
assertFormfield
(
models
.
Member
,
'gender'
,
widgets
.
AdminRadioSelect
,
self
.
assertFormfield
(
Member
,
'gender'
,
widgets
.
AdminRadioSelect
,
radio_fields
=
{
'gender'
:
admin
.
VERTICAL
})
def
test_inheritance
(
self
):
self
.
assertFormfield
(
models
.
Album
,
'backside_art'
,
widgets
.
AdminFileWidget
)
self
.
assertFormfield
(
Album
,
'backside_art'
,
widgets
.
AdminFileWidget
)
def
test_m2m_widgets
(
self
):
"""m2m fields help text as it applies to admin app (#9321)."""
class
AdvisorAdmin
(
admin
.
ModelAdmin
):
filter_vertical
=
[
'companies'
]
self
.
assertFormfield
(
models
.
Advisor
,
'companies'
,
widgets
.
FilteredSelectMultiple
,
self
.
assertFormfield
(
Advisor
,
'companies'
,
widgets
.
FilteredSelectMultiple
,
filter_vertical
=
[
'companies'
])
ma
=
AdvisorAdmin
(
models
.
Advisor
,
admin
.
site
)
f
=
ma
.
formfield_for_dbfield
(
models
.
Advisor
.
_meta
.
get_field
(
'companies'
),
request
=
None
)
ma
=
AdvisorAdmin
(
Advisor
,
admin
.
site
)
f
=
ma
.
formfield_for_dbfield
(
Advisor
.
_meta
.
get_field
(
'companies'
),
request
=
None
)
self
.
assertEqual
(
six
.
text_type
(
f
.
help_text
),
'Hold down "Control", or "Command" on a Mac, to select more than one.'
...
...
@@ -215,7 +218,7 @@ class AdminForeignKeyRawIdWidget(TestDataMixin, TestCase):
self
.
client
.
force_login
(
self
.
superuser
)
def
test_nonexistent_target_id
(
self
):
band
=
models
.
Band
.
objects
.
create
(
name
=
'Bogey Blues'
)
band
=
Band
.
objects
.
create
(
name
=
'Bogey Blues'
)
pk
=
band
.
pk
band
.
delete
()
post_data
=
{
...
...
@@ -388,7 +391,7 @@ class AdminFileWidgetTests(TestDataMixin, TestCase):
@classmethod
def
setUpTestData
(
cls
):
super
(
AdminFileWidgetTests
,
cls
)
.
setUpTestData
()
band
=
models
.
Band
.
objects
.
create
(
name
=
'Linkin Park'
)
band
=
Band
.
objects
.
create
(
name
=
'Linkin Park'
)
cls
.
album
=
band
.
album_set
.
create
(
name
=
'Hybrid Theory'
,
cover_art
=
r'albums\hybrid_theory.jpg'
)
...
...
@@ -440,11 +443,11 @@ class AdminFileWidgetTests(TestDataMixin, TestCase):
class
ForeignKeyRawIdWidgetTest
(
TestCase
):
def
test_render
(
self
):
band
=
models
.
Band
.
objects
.
create
(
name
=
'Linkin Park'
)
band
=
Band
.
objects
.
create
(
name
=
'Linkin Park'
)
band
.
album_set
.
create
(
name
=
'Hybrid Theory'
,
cover_art
=
r'albums\hybrid_theory.jpg'
)
rel
=
models
.
Album
.
_meta
.
get_field
(
'band'
)
.
remote_field
rel
=
Album
.
_meta
.
get_field
(
'band'
)
.
remote_field
w
=
widgets
.
ForeignKeyRawIdWidget
(
rel
,
widget_admin_site
)
self
.
assertHTMLEqual
(
...
...
@@ -460,12 +463,12 @@ class ForeignKeyRawIdWidgetTest(TestCase):
def
test_relations_to_non_primary_key
(
self
):
# ForeignKeyRawIdWidget works with fields which aren't related to
# the model's primary key.
apple
=
models
.
Inventory
.
objects
.
create
(
barcode
=
86
,
name
=
'Apple'
)
models
.
Inventory
.
objects
.
create
(
barcode
=
22
,
name
=
'Pear'
)
core
=
models
.
Inventory
.
objects
.
create
(
apple
=
Inventory
.
objects
.
create
(
barcode
=
86
,
name
=
'Apple'
)
Inventory
.
objects
.
create
(
barcode
=
22
,
name
=
'Pear'
)
core
=
Inventory
.
objects
.
create
(
barcode
=
87
,
name
=
'Core'
,
parent
=
apple
)
rel
=
models
.
Inventory
.
_meta
.
get_field
(
'parent'
)
.
remote_field
rel
=
Inventory
.
_meta
.
get_field
(
'parent'
)
.
remote_field
w
=
widgets
.
ForeignKeyRawIdWidget
(
rel
,
widget_admin_site
)
self
.
assertHTMLEqual
(
w
.
render
(
'test'
,
core
.
parent_id
,
attrs
=
{}),
...
...
@@ -480,9 +483,9 @@ class ForeignKeyRawIdWidgetTest(TestCase):
def
test_fk_related_model_not_in_admin
(
self
):
# FK to a model not registered with admin site. Raw ID widget should
# have no magnifying glass link. See #16542
big_honeycomb
=
models
.
Honeycomb
.
objects
.
create
(
location
=
'Old tree'
)
big_honeycomb
=
Honeycomb
.
objects
.
create
(
location
=
'Old tree'
)
big_honeycomb
.
bee_set
.
create
()
rel
=
models
.
Bee
.
_meta
.
get_field
(
'honeycomb'
)
.
remote_field
rel
=
Bee
.
_meta
.
get_field
(
'honeycomb'
)
.
remote_field
w
=
widgets
.
ForeignKeyRawIdWidget
(
rel
,
widget_admin_site
)
self
.
assertHTMLEqual
(
...
...
@@ -495,9 +498,9 @@ class ForeignKeyRawIdWidgetTest(TestCase):
def
test_fk_to_self_model_not_in_admin
(
self
):
# FK to self, not registered with admin site. Raw ID widget should have
# no magnifying glass link. See #16542
subject1
=
models
.
Individual
.
objects
.
create
(
name
=
'Subject #1'
)
models
.
Individual
.
objects
.
create
(
name
=
'Child'
,
parent
=
subject1
)
rel
=
models
.
Individual
.
_meta
.
get_field
(
'parent'
)
.
remote_field
subject1
=
Individual
.
objects
.
create
(
name
=
'Subject #1'
)
Individual
.
objects
.
create
(
name
=
'Child'
,
parent
=
subject1
)
rel
=
Individual
.
_meta
.
get_field
(
'parent'
)
.
remote_field
w
=
widgets
.
ForeignKeyRawIdWidget
(
rel
,
widget_admin_site
)
self
.
assertHTMLEqual
(
...
...
@@ -509,13 +512,13 @@ class ForeignKeyRawIdWidgetTest(TestCase):
def
test_proper_manager_for_label_lookup
(
self
):
# see #9258
rel
=
models
.
Inventory
.
_meta
.
get_field
(
'parent'
)
.
remote_field
rel
=
Inventory
.
_meta
.
get_field
(
'parent'
)
.
remote_field
w
=
widgets
.
ForeignKeyRawIdWidget
(
rel
,
widget_admin_site
)
hidden
=
models
.
Inventory
.
objects
.
create
(
hidden
=
Inventory
.
objects
.
create
(
barcode
=
93
,
name
=
'Hidden'
,
hidden
=
True
)
child_of_hidden
=
models
.
Inventory
.
objects
.
create
(
child_of_hidden
=
Inventory
.
objects
.
create
(
barcode
=
94
,
name
=
'Child of hidden'
,
parent
=
hidden
)
self
.
assertHTMLEqual
(
...
...
@@ -532,12 +535,12 @@ class ForeignKeyRawIdWidgetTest(TestCase):
class
ManyToManyRawIdWidgetTest
(
TestCase
):
def
test_render
(
self
):
band
=
models
.
Band
.
objects
.
create
(
name
=
'Linkin Park'
)
band
=
Band
.
objects
.
create
(
name
=
'Linkin Park'
)
m1
=
models
.
Member
.
objects
.
create
(
name
=
'Chester'
)
m2
=
models
.
Member
.
objects
.
create
(
name
=
'Mike'
)
m1
=
Member
.
objects
.
create
(
name
=
'Chester'
)
m2
=
Member
.
objects
.
create
(
name
=
'Mike'
)
band
.
members
.
add
(
m1
,
m2
)
rel
=
models
.
Band
.
_meta
.
get_field
(
'members'
)
.
remote_field
rel
=
Band
.
_meta
.
get_field
(
'members'
)
.
remote_field
w
=
widgets
.
ManyToManyRawIdWidget
(
rel
,
widget_admin_site
)
self
.
assertHTMLEqual
(
...
...
@@ -557,12 +560,12 @@ class ManyToManyRawIdWidgetTest(TestCase):
def
test_m2m_related_model_not_in_admin
(
self
):
# M2M relationship with model not registered with admin site. Raw ID
# widget should have no magnifying glass link. See #16542
consultor1
=
models
.
Advisor
.
objects
.
create
(
name
=
'Rockstar Techie'
)
consultor1
=
Advisor
.
objects
.
create
(
name
=
'Rockstar Techie'
)
c1
=
models
.
Company
.
objects
.
create
(
name
=
'Doodle'
)
c2
=
models
.
Company
.
objects
.
create
(
name
=
'Pear'
)
c1
=
Company
.
objects
.
create
(
name
=
'Doodle'
)
c2
=
Company
.
objects
.
create
(
name
=
'Pear'
)
consultor1
.
companies
.
add
(
c1
,
c2
)
rel
=
models
.
Advisor
.
_meta
.
get_field
(
'companies'
)
.
remote_field
rel
=
Advisor
.
_meta
.
get_field
(
'companies'
)
.
remote_field
w
=
widgets
.
ManyToManyRawIdWidget
(
rel
,
widget_admin_site
)
self
.
assertHTMLEqual
(
...
...
@@ -578,14 +581,14 @@ class ManyToManyRawIdWidgetTest(TestCase):
class
RelatedFieldWidgetWrapperTests
(
SimpleTestCase
):
def
test_no_can_add_related
(
self
):
rel
=
models
.
Individual
.
_meta
.
get_field
(
'parent'
)
.
remote_field
rel
=
Individual
.
_meta
.
get_field
(
'parent'
)
.
remote_field
w
=
widgets
.
AdminRadioSelect
()
# Used to fail with a name error.
w
=
widgets
.
RelatedFieldWidgetWrapper
(
w
,
rel
,
widget_admin_site
)
self
.
assertFalse
(
w
.
can_add_related
)
def
test_select_multiple_widget_cant_change_delete_related
(
self
):
rel
=
models
.
Individual
.
_meta
.
get_field
(
'parent'
)
.
remote_field
rel
=
Individual
.
_meta
.
get_field
(
'parent'
)
.
remote_field
widget
=
forms
.
SelectMultiple
()
wrapper
=
widgets
.
RelatedFieldWidgetWrapper
(
widget
,
rel
,
widget_admin_site
,
...
...
@@ -598,7 +601,7 @@ class RelatedFieldWidgetWrapperTests(SimpleTestCase):
self
.
assertFalse
(
wrapper
.
can_delete_related
)
def
test_on_delete_cascade_rel_cant_delete_related
(
self
):
rel
=
models
.
Individual
.
_meta
.
get_field
(
'soulmate'
)
.
remote_field
rel
=
Individual
.
_meta
.
get_field
(
'soulmate'
)
.
remote_field
widget
=
forms
.
Select
()
wrapper
=
widgets
.
RelatedFieldWidgetWrapper
(
widget
,
rel
,
widget_admin_site
,
...
...
@@ -740,7 +743,7 @@ class DateTimePickerSeleniumTests(AdminWidgetSeleniumTestCase):
self
.
admin_login
(
username
=
'super'
,
password
=
'secret'
,
login_url
=
'/'
)
# Enter test data
member
=
models
.
Member
.
objects
.
create
(
name
=
'Bob'
,
birthdate
=
datetime
(
1984
,
5
,
15
),
gender
=
'M'
)
member
=
Member
.
objects
.
create
(
name
=
'Bob'
,
birthdate
=
datetime
(
1984
,
5
,
15
),
gender
=
'M'
)
# Get month name translations for every locale
month_string
=
'May'
...
...
@@ -819,7 +822,7 @@ class DateTimePickerShortcutsSeleniumTests(AdminWidgetSeleniumTestCase):
# Make sure that "now" in javascript is within 10 seconds
# from "now" on the server side.
member
=
models
.
Member
.
objects
.
get
(
name
=
'test'
)
member
=
Member
.
objects
.
get
(
name
=
'test'
)
self
.
assertGreater
(
member
.
birthdate
,
now
-
error_margin
)
self
.
assertLess
(
member
.
birthdate
,
now
+
error_margin
)
...
...
@@ -835,15 +838,15 @@ class HorizontalVerticalFilterSeleniumTests(AdminWidgetSeleniumTestCase):
def
setUp
(
self
):
super
(
HorizontalVerticalFilterSeleniumTests
,
self
)
.
setUp
()
self
.
lisa
=
models
.
Student
.
objects
.
create
(
name
=
'Lisa'
)
self
.
john
=
models
.
Student
.
objects
.
create
(
name
=
'John'
)
self
.
bob
=
models
.
Student
.
objects
.
create
(
name
=
'Bob'
)
self
.
peter
=
models
.
Student
.
objects
.
create
(
name
=
'Peter'
)
self
.
jenny
=
models
.
Student
.
objects
.
create
(
name
=
'Jenny'
)
self
.
jason
=
models
.
Student
.
objects
.
create
(
name
=
'Jason'
)
self
.
cliff
=
models
.
Student
.
objects
.
create
(
name
=
'Cliff'
)
self
.
arthur
=
models
.
Student
.
objects
.
create
(
name
=
'Arthur'
)
self
.
school
=
models
.
School
.
objects
.
create
(
name
=
'School of Awesome'
)
self
.
lisa
=
Student
.
objects
.
create
(
name
=
'Lisa'
)
self
.
john
=
Student
.
objects
.
create
(
name
=
'John'
)
self
.
bob
=
Student
.
objects
.
create
(
name
=
'Bob'
)
self
.
peter
=
Student
.
objects
.
create
(
name
=
'Peter'
)
self
.
jenny
=
Student
.
objects
.
create
(
name
=
'Jenny'
)
self
.
jason
=
Student
.
objects
.
create
(
name
=
'Jason'
)
self
.
cliff
=
Student
.
objects
.
create
(
name
=
'Cliff'
)
self
.
arthur
=
Student
.
objects
.
create
(
name
=
'Arthur'
)
self
.
school
=
School
.
objects
.
create
(
name
=
'School of Awesome'
)
def
assertActiveButtons
(
self
,
mode
,
field_name
,
choose
,
remove
,
choose_all
=
None
,
remove_all
=
None
):
choose_link
=
'#id_
%
s_add_link'
%
field_name
...
...
@@ -1009,7 +1012,7 @@ class HorizontalVerticalFilterSeleniumTests(AdminWidgetSeleniumTestCase):
# Save and check that everything is properly stored in the database ---
self
.
selenium
.
find_element_by_xpath
(
'//input[@value="Save"]'
)
.
click
()
self
.
wait_page_loaded
()
self
.
school
=
models
.
School
.
objects
.
get
(
id
=
self
.
school
.
id
)
# Reload from database
self
.
school
=
School
.
objects
.
get
(
id
=
self
.
school
.
id
)
# Reload from database
self
.
assertEqual
(
list
(
self
.
school
.
students
.
all
()),
[
self
.
arthur
,
self
.
cliff
,
self
.
jason
,
self
.
john
])
self
.
assertEqual
(
list
(
self
.
school
.
alumni
.
all
()),
[
self
.
arthur
,
self
.
cliff
,
self
.
jason
,
self
.
john
])
...
...
@@ -1094,7 +1097,7 @@ class HorizontalVerticalFilterSeleniumTests(AdminWidgetSeleniumTestCase):
# Save and check that everything is properly stored in the database ---
self
.
selenium
.
find_element_by_xpath
(
'//input[@value="Save"]'
)
.
click
()
self
.
wait_page_loaded
()
self
.
school
=
models
.
School
.
objects
.
get
(
id
=
self
.
school
.
id
)
# Reload from database
self
.
school
=
School
.
objects
.
get
(
id
=
self
.
school
.
id
)
# Reload from database
self
.
assertEqual
(
list
(
self
.
school
.
students
.
all
()),
[
self
.
jason
,
self
.
peter
])
self
.
assertEqual
(
list
(
self
.
school
.
alumni
.
all
()),
[
self
.
jason
,
self
.
peter
])
...
...
@@ -1152,8 +1155,8 @@ class AdminRawIdWidgetSeleniumTests(AdminWidgetSeleniumTestCase):
def
setUp
(
self
):
super
(
AdminRawIdWidgetSeleniumTests
,
self
)
.
setUp
()
models
.
Band
.
objects
.
create
(
id
=
42
,
name
=
'Bogey Blues'
)
models
.
Band
.
objects
.
create
(
id
=
98
,
name
=
'Green Potatoes'
)
Band
.
objects
.
create
(
id
=
42
,
name
=
'Bogey Blues'
)
Band
.
objects
.
create
(
id
=
98
,
name
=
'Green Potatoes'
)
def
test_ForeignKey
(
self
):
self
.
admin_login
(
username
=
'super'
,
password
=
'secret'
,
login_url
=
'/'
)
...
...
@@ -1268,6 +1271,6 @@ class RelatedFieldWidgetSeleniumTests(AdminWidgetSeleniumTestCase):
# Go ahead and submit the form to make sure it works
self
.
selenium
.
find_element_by_css_selector
(
save_button_css_selector
)
.
click
()
self
.
wait_for_text
(
'li.success'
,
'The profile "changednewuser" was added successfully.'
)
profiles
=
models
.
Profile
.
objects
.
all
()
profiles
=
Profile
.
objects
.
all
()
self
.
assertEqual
(
len
(
profiles
),
1
)
self
.
assertEqual
(
profiles
[
0
]
.
user
.
username
,
username_value
)
tests/admin_widgets/widgetadmin.py
Dosyayı görüntüle @
e744c7e4
from
django.contrib
import
admin
from
.
import
models
from
.models
import
(
Advisor
,
Album
,
Band
,
Bee
,
Car
,
CarTire
,
Event
,
Inventory
,
Member
,
Profile
,
School
,
User
,
)
class
WidgetAdmin
(
admin
.
AdminSite
):
...
...
@@ -15,7 +18,7 @@ class CarAdmin(admin.ModelAdmin):
class
CarTireAdmin
(
admin
.
ModelAdmin
):
def
formfield_for_foreignkey
(
self
,
db_field
,
request
,
**
kwargs
):
if
db_field
.
name
==
"car"
:
kwargs
[
"queryset"
]
=
models
.
Car
.
objects
.
filter
(
owner
=
request
.
user
)
kwargs
[
"queryset"
]
=
Car
.
objects
.
filter
(
owner
=
request
.
user
)
return
db_field
.
formfield
(
**
kwargs
)
return
super
(
CarTireAdmin
,
self
)
.
formfield_for_foreignkey
(
db_field
,
request
,
**
kwargs
)
...
...
@@ -36,21 +39,21 @@ class SchoolAdmin(admin.ModelAdmin):
site
=
WidgetAdmin
(
name
=
'widget-admin'
)
site
.
register
(
models
.
User
)
site
.
register
(
models
.
Car
,
CarAdmin
)
site
.
register
(
models
.
CarTire
,
CarTireAdmin
)
site
.
register
(
User
)
site
.
register
(
Car
,
CarAdmin
)
site
.
register
(
CarTire
,
CarTireAdmin
)
site
.
register
(
models
.
Member
)
site
.
register
(
models
.
Band
)
site
.
register
(
models
.
Event
,
EventAdmin
)
site
.
register
(
models
.
Album
,
AlbumAdmin
)
site
.
register
(
Member
)
site
.
register
(
Band
)
site
.
register
(
Event
,
EventAdmin
)
site
.
register
(
Album
,
AlbumAdmin
)
site
.
register
(
models
.
Inventory
)
site
.
register
(
Inventory
)
site
.
register
(
models
.
Bee
)
site
.
register
(
Bee
)
site
.
register
(
models
.
Advisor
)
site
.
register
(
Advisor
)
site
.
register
(
models
.
School
,
SchoolAdmin
)
site
.
register
(
School
,
SchoolAdmin
)
site
.
register
(
models
.
Profile
)
site
.
register
(
Profile
)
tests/backends/tests.py
Dosyayı görüntüle @
e744c7e4
...
...
@@ -29,7 +29,11 @@ from django.test import (
from
django.utils
import
six
from
django.utils.six.moves
import
range
from
.
import
models
from
.models
import
(
Article
,
Item
,
Object
,
ObjectReference
,
Person
,
Post
,
RawData
,
Reporter
,
ReporterProxy
,
SchoolClass
,
Square
,
VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
,
)
class
DatabaseWrapperTests
(
SimpleTestCase
):
...
...
@@ -139,7 +143,7 @@ class SQLiteTests(TestCase):
in order to be monotonically increasing. Refs #10164.
"""
with
connection
.
schema_editor
(
collect_sql
=
True
)
as
editor
:
editor
.
create_model
(
models
.
Square
)
editor
.
create_model
(
Square
)
statements
=
editor
.
collected_sql
match
=
re
.
search
(
'"id" ([^,]+),'
,
statements
[
0
])
self
.
assertIsNotNone
(
match
)
...
...
@@ -155,13 +159,13 @@ class SQLiteTests(TestCase):
"""
for
aggregate
in
(
Sum
,
Avg
,
Variance
,
StdDev
):
with
self
.
assertRaises
(
NotImplementedError
):
models
.
Item
.
objects
.
all
()
.
aggregate
(
aggregate
(
'time'
))
Item
.
objects
.
all
()
.
aggregate
(
aggregate
(
'time'
))
with
self
.
assertRaises
(
NotImplementedError
):
models
.
Item
.
objects
.
all
()
.
aggregate
(
aggregate
(
'date'
))
Item
.
objects
.
all
()
.
aggregate
(
aggregate
(
'date'
))
with
self
.
assertRaises
(
NotImplementedError
):
models
.
Item
.
objects
.
all
()
.
aggregate
(
aggregate
(
'last_modified'
))
Item
.
objects
.
all
()
.
aggregate
(
aggregate
(
'last_modified'
))
with
self
.
assertRaises
(
NotImplementedError
):
models
.
Item
.
objects
.
all
()
.
aggregate
(
Item
.
objects
.
all
()
.
aggregate
(
**
{
'complex'
:
aggregate
(
'last_modified'
)
+
aggregate
(
'last_modified'
)}
)
...
...
@@ -381,8 +385,8 @@ class DateQuotingTest(TestCase):
fields which clash with strings passed to it (e.g. 'year') (#12818).
"""
updated
=
datetime
.
datetime
(
2010
,
2
,
20
)
models
.
SchoolClass
.
objects
.
create
(
year
=
2009
,
last_updated
=
updated
)
years
=
models
.
SchoolClass
.
objects
.
dates
(
'last_updated'
,
'year'
)
SchoolClass
.
objects
.
create
(
year
=
2009
,
last_updated
=
updated
)
years
=
SchoolClass
.
objects
.
dates
(
'last_updated'
,
'year'
)
self
.
assertEqual
(
list
(
years
),
[
datetime
.
date
(
2010
,
1
,
1
)])
def
test_django_date_extract
(
self
):
...
...
@@ -391,8 +395,8 @@ class DateQuotingTest(TestCase):
which clash with strings passed to it (e.g. 'day') (#12818).
"""
updated
=
datetime
.
datetime
(
2010
,
2
,
20
)
models
.
SchoolClass
.
objects
.
create
(
year
=
2009
,
last_updated
=
updated
)
classes
=
models
.
SchoolClass
.
objects
.
filter
(
last_updated__day
=
20
)
SchoolClass
.
objects
.
create
(
year
=
2009
,
last_updated
=
updated
)
classes
=
SchoolClass
.
objects
.
filter
(
last_updated__day
=
20
)
self
.
assertEqual
(
len
(
classes
),
1
)
...
...
@@ -408,16 +412,16 @@ class LastExecutedQueryTest(TestCase):
connection
.
ops
.
last_executed_query
(
cursor
,
''
,
())
def
test_debug_sql
(
self
):
list
(
models
.
Reporter
.
objects
.
filter
(
first_name
=
"test"
))
list
(
Reporter
.
objects
.
filter
(
first_name
=
"test"
))
sql
=
connection
.
queries
[
-
1
][
'sql'
]
.
lower
()
self
.
assertIn
(
"select"
,
sql
)
self
.
assertIn
(
models
.
Reporter
.
_meta
.
db_table
,
sql
)
self
.
assertIn
(
Reporter
.
_meta
.
db_table
,
sql
)
def
test_query_encoding
(
self
):
"""
last_executed_query() returns an Unicode string
"""
data
=
models
.
RawData
.
objects
.
filter
(
raw_data
=
b
'
\x00\x46
\xFE
'
)
.
extra
(
select
=
{
'föö'
:
1
})
data
=
RawData
.
objects
.
filter
(
raw_data
=
b
'
\x00\x46
\xFE
'
)
.
extra
(
select
=
{
'föö'
:
1
})
sql
,
params
=
data
.
query
.
sql_with_params
()
cursor
=
data
.
query
.
get_compiler
(
'default'
)
.
execute_sql
(
CURSOR
)
last_sql
=
cursor
.
db
.
ops
.
last_executed_query
(
cursor
,
sql
,
params
)
...
...
@@ -483,15 +487,15 @@ class LongNameTest(TransactionTestCase):
def
test_sequence_name_length_limits_create
(
self
):
"""Test creation of model with long name and long pk name doesn't error. Ref #8901"""
models
.
VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
.
objects
.
create
()
VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
.
objects
.
create
()
def
test_sequence_name_length_limits_m2m
(
self
):
"""
An m2m save of a model with a long name and a long m2m field name
doesn't error (#8901).
"""
obj
=
models
.
VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
.
objects
.
create
()
rel_obj
=
models
.
Person
.
objects
.
create
(
first_name
=
'Django'
,
last_name
=
'Reinhardt'
)
obj
=
VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
.
objects
.
create
()
rel_obj
=
Person
.
objects
.
create
(
first_name
=
'Django'
,
last_name
=
'Reinhardt'
)
obj
.
m2m_also_quite_long_zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
.
add
(
rel_obj
)
def
test_sequence_name_length_limits_flush
(
self
):
...
...
@@ -503,7 +507,7 @@ class LongNameTest(TransactionTestCase):
# internals to generate the likely offending SQL and run it manually
# Some convenience aliases
VLM
=
models
.
VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
VLM
=
VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
VLM_m2m
=
VLM
.
m2m_also_quite_long_zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
.
through
tables
=
[
VLM
.
_meta
.
db_table
,
...
...
@@ -525,17 +529,17 @@ class SequenceResetTest(TestCase):
def
test_generic_relation
(
self
):
"Sequence names are correct when resetting generic relations (Ref #13941)"
# Create an object with a manually specified PK
models
.
Post
.
objects
.
create
(
id
=
10
,
name
=
'1st post'
,
text
=
'hello world'
)
Post
.
objects
.
create
(
id
=
10
,
name
=
'1st post'
,
text
=
'hello world'
)
# Reset the sequences for the database
cursor
=
connection
.
cursor
()
commands
=
connections
[
DEFAULT_DB_ALIAS
]
.
ops
.
sequence_reset_sql
(
no_style
(),
[
models
.
Post
])
commands
=
connections
[
DEFAULT_DB_ALIAS
]
.
ops
.
sequence_reset_sql
(
no_style
(),
[
Post
])
for
sql
in
commands
:
cursor
.
execute
(
sql
)
# If we create a new object now, it should have a PK greater
# than the PK we specified manually.
obj
=
models
.
Post
.
objects
.
create
(
name
=
'New post'
,
text
=
'goodbye world'
)
obj
=
Post
.
objects
.
create
(
name
=
'New post'
,
text
=
'goodbye world'
)
self
.
assertGreater
(
obj
.
pk
,
10
)
...
...
@@ -608,7 +612,7 @@ class BackendTestCase(TransactionTestCase):
def
create_squares
(
self
,
args
,
paramstyle
,
multiple
):
cursor
=
connection
.
cursor
()
opts
=
models
.
Square
.
_meta
opts
=
Square
.
_meta
tbl
=
connection
.
introspection
.
table_name_converter
(
opts
.
db_table
)
f1
=
connection
.
ops
.
quote_name
(
opts
.
get_field
(
'root'
)
.
column
)
f2
=
connection
.
ops
.
quote_name
(
opts
.
get_field
(
'square'
)
.
column
)
...
...
@@ -627,67 +631,67 @@ class BackendTestCase(TransactionTestCase):
# Test cursor.executemany #4896
args
=
[(
i
,
i
**
2
)
for
i
in
range
(
-
5
,
6
)]
self
.
create_squares_with_executemany
(
args
)
self
.
assertEqual
(
models
.
Square
.
objects
.
count
(),
11
)
self
.
assertEqual
(
Square
.
objects
.
count
(),
11
)
for
i
in
range
(
-
5
,
6
):
square
=
models
.
Square
.
objects
.
get
(
root
=
i
)
square
=
Square
.
objects
.
get
(
root
=
i
)
self
.
assertEqual
(
square
.
square
,
i
**
2
)
def
test_cursor_executemany_with_empty_params_list
(
self
):
# Test executemany with params=[] does nothing #4765
args
=
[]
self
.
create_squares_with_executemany
(
args
)
self
.
assertEqual
(
models
.
Square
.
objects
.
count
(),
0
)
self
.
assertEqual
(
Square
.
objects
.
count
(),
0
)
def
test_cursor_executemany_with_iterator
(
self
):
# Test executemany accepts iterators #10320
args
=
iter
((
i
,
i
**
2
)
for
i
in
range
(
-
3
,
2
))
self
.
create_squares_with_executemany
(
args
)
self
.
assertEqual
(
models
.
Square
.
objects
.
count
(),
5
)
self
.
assertEqual
(
Square
.
objects
.
count
(),
5
)
args
=
iter
((
i
,
i
**
2
)
for
i
in
range
(
3
,
7
))
with
override_settings
(
DEBUG
=
True
):
# same test for DebugCursorWrapper
self
.
create_squares_with_executemany
(
args
)
self
.
assertEqual
(
models
.
Square
.
objects
.
count
(),
9
)
self
.
assertEqual
(
Square
.
objects
.
count
(),
9
)
@skipUnlessDBFeature
(
'supports_paramstyle_pyformat'
)
def
test_cursor_execute_with_pyformat
(
self
):
# Support pyformat style passing of parameters #10070
args
=
{
'root'
:
3
,
'square'
:
9
}
self
.
create_squares
(
args
,
'pyformat'
,
multiple
=
False
)
self
.
assertEqual
(
models
.
Square
.
objects
.
count
(),
1
)
self
.
assertEqual
(
Square
.
objects
.
count
(),
1
)
@skipUnlessDBFeature
(
'supports_paramstyle_pyformat'
)
def
test_cursor_executemany_with_pyformat
(
self
):
# Support pyformat style passing of parameters #10070
args
=
[{
'root'
:
i
,
'square'
:
i
**
2
}
for
i
in
range
(
-
5
,
6
)]
self
.
create_squares
(
args
,
'pyformat'
,
multiple
=
True
)
self
.
assertEqual
(
models
.
Square
.
objects
.
count
(),
11
)
self
.
assertEqual
(
Square
.
objects
.
count
(),
11
)
for
i
in
range
(
-
5
,
6
):
square
=
models
.
Square
.
objects
.
get
(
root
=
i
)
square
=
Square
.
objects
.
get
(
root
=
i
)
self
.
assertEqual
(
square
.
square
,
i
**
2
)
@skipUnlessDBFeature
(
'supports_paramstyle_pyformat'
)
def
test_cursor_executemany_with_pyformat_iterator
(
self
):
args
=
iter
({
'root'
:
i
,
'square'
:
i
**
2
}
for
i
in
range
(
-
3
,
2
))
self
.
create_squares
(
args
,
'pyformat'
,
multiple
=
True
)
self
.
assertEqual
(
models
.
Square
.
objects
.
count
(),
5
)
self
.
assertEqual
(
Square
.
objects
.
count
(),
5
)
args
=
iter
({
'root'
:
i
,
'square'
:
i
**
2
}
for
i
in
range
(
3
,
7
))
with
override_settings
(
DEBUG
=
True
):
# same test for DebugCursorWrapper
self
.
create_squares
(
args
,
'pyformat'
,
multiple
=
True
)
self
.
assertEqual
(
models
.
Square
.
objects
.
count
(),
9
)
self
.
assertEqual
(
Square
.
objects
.
count
(),
9
)
def
test_unicode_fetches
(
self
):
# fetchone, fetchmany, fetchall return strings as unicode objects #6254
qn
=
connection
.
ops
.
quote_name
models
.
Person
(
first_name
=
"John"
,
last_name
=
"Doe"
)
.
save
()
models
.
Person
(
first_name
=
"Jane"
,
last_name
=
"Doe"
)
.
save
()
models
.
Person
(
first_name
=
"Mary"
,
last_name
=
"Agnelline"
)
.
save
()
models
.
Person
(
first_name
=
"Peter"
,
last_name
=
"Parker"
)
.
save
()
models
.
Person
(
first_name
=
"Clark"
,
last_name
=
"Kent"
)
.
save
()
opts2
=
models
.
Person
.
_meta
Person
(
first_name
=
"John"
,
last_name
=
"Doe"
)
.
save
()
Person
(
first_name
=
"Jane"
,
last_name
=
"Doe"
)
.
save
()
Person
(
first_name
=
"Mary"
,
last_name
=
"Agnelline"
)
.
save
()
Person
(
first_name
=
"Peter"
,
last_name
=
"Parker"
)
.
save
()
Person
(
first_name
=
"Clark"
,
last_name
=
"Kent"
)
.
save
()
opts2
=
Person
.
_meta
f3
,
f4
=
opts2
.
get_field
(
'first_name'
),
opts2
.
get_field
(
'last_name'
)
cursor
=
connection
.
cursor
()
cursor
.
execute
(
...
...
@@ -737,7 +741,7 @@ class BackendTestCase(TransactionTestCase):
def
test_duplicate_table_error
(
self
):
""" Creating an existing table returns a DatabaseError """
cursor
=
connection
.
cursor
()
query
=
'CREATE TABLE
%
s (id INTEGER);'
%
models
.
Article
.
_meta
.
db_table
query
=
'CREATE TABLE
%
s (id INTEGER);'
%
Article
.
_meta
.
db_table
with
self
.
assertRaises
(
DatabaseError
):
cursor
.
execute
(
query
)
...
...
@@ -862,14 +866,14 @@ class FkConstraintsTests(TransactionTestCase):
def
setUp
(
self
):
# Create a Reporter.
self
.
r
=
models
.
Reporter
.
objects
.
create
(
first_name
=
'John'
,
last_name
=
'Smith'
)
self
.
r
=
Reporter
.
objects
.
create
(
first_name
=
'John'
,
last_name
=
'Smith'
)
def
test_integrity_checks_on_creation
(
self
):
"""
Try to create a model instance that violates a FK constraint. If it
fails it should fail with IntegrityError.
"""
a1
=
models
.
Article
(
headline
=
"This is a test"
,
pub_date
=
datetime
.
datetime
(
2005
,
7
,
27
),
reporter_id
=
30
)
a1
=
Article
(
headline
=
"This is a test"
,
pub_date
=
datetime
.
datetime
(
2005
,
7
,
27
),
reporter_id
=
30
)
try
:
a1
.
save
()
except
IntegrityError
:
...
...
@@ -877,10 +881,12 @@ class FkConstraintsTests(TransactionTestCase):
else
:
self
.
skipTest
(
"This backend does not support integrity checks."
)
# Now that we know this backend supports integrity checks we make sure
# constraints are also enforced for proxy models. Refs #17519
a2
=
models
.
Article
(
headline
=
'This is another test'
,
reporter
=
self
.
r
,
pub_date
=
datetime
.
datetime
(
2012
,
8
,
3
),
reporter_proxy_id
=
30
)
# constraints are also enforced for proxy Refs #17519
a2
=
Article
(
headline
=
'This is another test'
,
reporter
=
self
.
r
,
pub_date
=
datetime
.
datetime
(
2012
,
8
,
3
),
reporter_proxy_id
=
30
,
)
with
self
.
assertRaises
(
IntegrityError
):
a2
.
save
()
...
...
@@ -890,9 +896,9 @@ class FkConstraintsTests(TransactionTestCase):
If it fails it should fail with IntegrityError.
"""
# Create an Article.
models
.
Article
.
objects
.
create
(
headline
=
"Test article"
,
pub_date
=
datetime
.
datetime
(
2010
,
9
,
4
),
reporter
=
self
.
r
)
Article
.
objects
.
create
(
headline
=
"Test article"
,
pub_date
=
datetime
.
datetime
(
2010
,
9
,
4
),
reporter
=
self
.
r
)
# Retrieve it from the DB
a1
=
models
.
Article
.
objects
.
get
(
headline
=
"Test article"
)
a1
=
Article
.
objects
.
get
(
headline
=
"Test article"
)
a1
.
reporter_id
=
30
try
:
a1
.
save
()
...
...
@@ -901,14 +907,16 @@ class FkConstraintsTests(TransactionTestCase):
else
:
self
.
skipTest
(
"This backend does not support integrity checks."
)
# Now that we know this backend supports integrity checks we make sure
# constraints are also enforced for proxy
models.
Refs #17519
# constraints are also enforced for proxy Refs #17519
# Create another article
r_proxy
=
models
.
ReporterProxy
.
objects
.
get
(
pk
=
self
.
r
.
pk
)
models
.
Article
.
objects
.
create
(
headline
=
'Another article'
,
pub_date
=
datetime
.
datetime
(
1988
,
5
,
15
),
reporter
=
self
.
r
,
reporter_proxy
=
r_proxy
)
r_proxy
=
ReporterProxy
.
objects
.
get
(
pk
=
self
.
r
.
pk
)
Article
.
objects
.
create
(
headline
=
'Another article'
,
pub_date
=
datetime
.
datetime
(
1988
,
5
,
15
),
reporter
=
self
.
r
,
reporter_proxy
=
r_proxy
,
)
# Retrieve the second article from the DB
a2
=
models
.
Article
.
objects
.
get
(
headline
=
'Another article'
)
a2
=
Article
.
objects
.
get
(
headline
=
'Another article'
)
a2
.
reporter_proxy_id
=
30
with
self
.
assertRaises
(
IntegrityError
):
a2
.
save
()
...
...
@@ -920,13 +928,13 @@ class FkConstraintsTests(TransactionTestCase):
"""
with
transaction
.
atomic
():
# Create an Article.
models
.
Article
.
objects
.
create
(
Article
.
objects
.
create
(
headline
=
"Test article"
,
pub_date
=
datetime
.
datetime
(
2010
,
9
,
4
),
reporter
=
self
.
r
,
)
# Retrieve it from the DB
a
=
models
.
Article
.
objects
.
get
(
headline
=
"Test article"
)
a
=
Article
.
objects
.
get
(
headline
=
"Test article"
)
a
.
reporter_id
=
30
try
:
connection
.
disable_constraint_checking
()
...
...
@@ -943,13 +951,13 @@ class FkConstraintsTests(TransactionTestCase):
"""
with
transaction
.
atomic
():
# Create an Article.
models
.
Article
.
objects
.
create
(
Article
.
objects
.
create
(
headline
=
"Test article"
,
pub_date
=
datetime
.
datetime
(
2010
,
9
,
4
),
reporter
=
self
.
r
,
)
# Retrieve it from the DB
a
=
models
.
Article
.
objects
.
get
(
headline
=
"Test article"
)
a
=
Article
.
objects
.
get
(
headline
=
"Test article"
)
a
.
reporter_id
=
30
try
:
with
connection
.
constraint_checks_disabled
():
...
...
@@ -964,13 +972,13 @@ class FkConstraintsTests(TransactionTestCase):
"""
with
transaction
.
atomic
():
# Create an Article.
models
.
Article
.
objects
.
create
(
Article
.
objects
.
create
(
headline
=
"Test article"
,
pub_date
=
datetime
.
datetime
(
2010
,
9
,
4
),
reporter
=
self
.
r
,
)
# Retrieve it from the DB
a
=
models
.
Article
.
objects
.
get
(
headline
=
"Test article"
)
a
=
Article
.
objects
.
get
(
headline
=
"Test article"
)
a
.
reporter_id
=
30
with
connection
.
constraint_checks_disabled
():
a
.
save
()
...
...
@@ -1052,14 +1060,14 @@ class ThreadTests(TransactionTestCase):
"""
A connection can be passed from one thread to the other (#17258).
"""
models
.
Person
.
objects
.
create
(
first_name
=
"John"
,
last_name
=
"Doe"
)
Person
.
objects
.
create
(
first_name
=
"John"
,
last_name
=
"Doe"
)
def
do_thread
():
def
runner
(
main_thread_connection
):
from
django.db
import
connections
connections
[
'default'
]
=
main_thread_connection
try
:
models
.
Person
.
objects
.
get
(
first_name
=
"John"
,
last_name
=
"Doe"
)
Person
.
objects
.
get
(
first_name
=
"John"
,
last_name
=
"Doe"
)
except
Exception
as
e
:
exceptions
.
append
(
e
)
t
=
threading
.
Thread
(
target
=
runner
,
args
=
[
connections
[
'default'
]])
...
...
@@ -1138,35 +1146,35 @@ class MySQLPKZeroTests(TestCase):
@skipIfDBFeature
(
'allows_auto_pk_0'
)
def
test_zero_as_autoval
(
self
):
with
self
.
assertRaises
(
ValueError
):
models
.
Square
.
objects
.
create
(
id
=
0
,
root
=
0
,
square
=
1
)
Square
.
objects
.
create
(
id
=
0
,
root
=
0
,
square
=
1
)
class
DBConstraintTestCase
(
TestCase
):
def
test_can_reference_existent
(
self
):
obj
=
models
.
Object
.
objects
.
create
()
ref
=
models
.
ObjectReference
.
objects
.
create
(
obj
=
obj
)
obj
=
Object
.
objects
.
create
()
ref
=
ObjectReference
.
objects
.
create
(
obj
=
obj
)
self
.
assertEqual
(
ref
.
obj
,
obj
)
ref
=
models
.
ObjectReference
.
objects
.
get
(
obj
=
obj
)
ref
=
ObjectReference
.
objects
.
get
(
obj
=
obj
)
self
.
assertEqual
(
ref
.
obj
,
obj
)
def
test_can_reference_non_existent
(
self
):
self
.
assertFalse
(
models
.
Object
.
objects
.
filter
(
id
=
12345
)
.
exists
())
ref
=
models
.
ObjectReference
.
objects
.
create
(
obj_id
=
12345
)
ref_new
=
models
.
ObjectReference
.
objects
.
get
(
obj_id
=
12345
)
self
.
assertFalse
(
Object
.
objects
.
filter
(
id
=
12345
)
.
exists
())
ref
=
ObjectReference
.
objects
.
create
(
obj_id
=
12345
)
ref_new
=
ObjectReference
.
objects
.
get
(
obj_id
=
12345
)
self
.
assertEqual
(
ref
,
ref_new
)
with
self
.
assertRaises
(
models
.
Object
.
DoesNotExist
):
with
self
.
assertRaises
(
Object
.
DoesNotExist
):
ref
.
obj
def
test_many_to_many
(
self
):
obj
=
models
.
Object
.
objects
.
create
()
obj
=
Object
.
objects
.
create
()
obj
.
related_objects
.
create
()
self
.
assertEqual
(
models
.
Object
.
objects
.
count
(),
2
)
self
.
assertEqual
(
Object
.
objects
.
count
(),
2
)
self
.
assertEqual
(
obj
.
related_objects
.
count
(),
1
)
intermediary_model
=
models
.
Object
.
_meta
.
get_field
(
"related_objects"
)
.
remote_field
.
through
intermediary_model
=
Object
.
_meta
.
get_field
(
"related_objects"
)
.
remote_field
.
through
intermediary_model
.
objects
.
create
(
from_object_id
=
obj
.
id
,
to_object_id
=
12345
)
self
.
assertEqual
(
obj
.
related_objects
.
count
(),
1
)
self
.
assertEqual
(
intermediary_model
.
objects
.
count
(),
2
)
...
...
@@ -1234,7 +1242,7 @@ class TestSqliteThreadSharing(TransactionTestCase):
def
test_database_sharing_in_threads
(
self
):
def
create_object
():
models
.
Object
.
objects
.
create
()
Object
.
objects
.
create
()
create_object
()
...
...
@@ -1242,4 +1250,4 @@ class TestSqliteThreadSharing(TransactionTestCase):
thread
.
start
()
thread
.
join
()
self
.
assertEqual
(
models
.
Object
.
objects
.
count
(),
2
)
self
.
assertEqual
(
Object
.
objects
.
count
(),
2
)
tests/generic_views/urls.py
Dosyayı görüntüle @
e744c7e4
...
...
@@ -7,7 +7,8 @@ from django.contrib.auth.decorators import login_required
from
django.views.decorators.cache
import
cache_page
from
django.views.generic
import
TemplateView
from
.
import
models
,
views
from
.
import
views
from
.models
import
Book
urlpatterns
=
[
# TemplateView
...
...
@@ -134,7 +135,7 @@ urlpatterns = [
url
(
r'^dates/books/paginated/$'
,
views
.
BookArchive
.
as_view
(
paginate_by
=
10
)),
url
(
r'^dates/books/reverse/$'
,
views
.
BookArchive
.
as_view
(
queryset
=
models
.
Book
.
objects
.
order_by
(
'pubdate'
))),
views
.
BookArchive
.
as_view
(
queryset
=
Book
.
objects
.
order_by
(
'pubdate'
))),
url
(
r'^dates/books/by_month/$'
,
views
.
BookArchive
.
as_view
(
date_list_period
=
'month'
)),
url
(
r'^dates/booksignings/$'
,
...
...
@@ -207,7 +208,7 @@ urlpatterns = [
url
(
r'^dates/books/no_year/$'
,
views
.
BookYearArchive
.
as_view
()),
url
(
r'^dates/books/(?P<year>[0-9]{4})/reverse/$'
,
views
.
BookYearArchive
.
as_view
(
queryset
=
models
.
Book
.
objects
.
order_by
(
'pubdate'
))),
views
.
BookYearArchive
.
as_view
(
queryset
=
Book
.
objects
.
order_by
(
'pubdate'
))),
url
(
r'^dates/booksignings/(?P<year>[0-9]{4})/$'
,
views
.
BookSigningYearArchive
.
as_view
()),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment