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
d311124b
Kaydet (Commit)
d311124b
authored
Agu 18, 2018
tarafından
Tim Graham
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Fixed #29682 -- Fixed admin change form crash if a view-only model's form has an extra field.
üst
0e7a9525
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
36 additions
and
3 deletions
+36
-3
helpers.py
django/contrib/admin/helpers.py
+1
-1
utils.py
django/contrib/admin/utils.py
+5
-1
2.1.1.txt
docs/releases/2.1.1.txt
+3
-0
tests.py
tests/admin_utils/tests.py
+16
-0
admin.py
tests/admin_views/admin.py
+10
-1
tests.py
tests/admin_views/tests.py
+1
-0
No files found.
django/contrib/admin/helpers.py
Dosyayı görüntüle @
d311124b
...
@@ -162,7 +162,7 @@ class AdminReadonlyField:
...
@@ -162,7 +162,7 @@ class AdminReadonlyField:
if
form
.
_meta
.
labels
and
class_name
in
form
.
_meta
.
labels
:
if
form
.
_meta
.
labels
and
class_name
in
form
.
_meta
.
labels
:
label
=
form
.
_meta
.
labels
[
class_name
]
label
=
form
.
_meta
.
labels
[
class_name
]
else
:
else
:
label
=
label_for_field
(
field
,
form
.
_meta
.
model
,
model_admin
)
label
=
label_for_field
(
field
,
form
.
_meta
.
model
,
model_admin
,
form
=
form
)
if
form
.
_meta
.
help_texts
and
class_name
in
form
.
_meta
.
help_texts
:
if
form
.
_meta
.
help_texts
and
class_name
in
form
.
_meta
.
help_texts
:
help_text
=
form
.
_meta
.
help_texts
[
class_name
]
help_text
=
form
.
_meta
.
help_texts
[
class_name
]
...
...
django/contrib/admin/utils.py
Dosyayı görüntüle @
d311124b
...
@@ -319,7 +319,7 @@ def _get_non_gfk_field(opts, name):
...
@@ -319,7 +319,7 @@ def _get_non_gfk_field(opts, name):
return
field
return
field
def
label_for_field
(
name
,
model
,
model_admin
=
None
,
return_attr
=
False
):
def
label_for_field
(
name
,
model
,
model_admin
=
None
,
return_attr
=
False
,
form
=
None
):
"""
"""
Return a sensible label for a field name. The name can be a callable,
Return a sensible label for a field name. The name can be a callable,
property (but not created with @property decorator), or the name of an
property (but not created with @property decorator), or the name of an
...
@@ -346,10 +346,14 @@ def label_for_field(name, model, model_admin=None, return_attr=False):
...
@@ -346,10 +346,14 @@ def label_for_field(name, model, model_admin=None, return_attr=False):
attr
=
getattr
(
model_admin
,
name
)
attr
=
getattr
(
model_admin
,
name
)
elif
hasattr
(
model
,
name
):
elif
hasattr
(
model
,
name
):
attr
=
getattr
(
model
,
name
)
attr
=
getattr
(
model
,
name
)
elif
form
and
name
in
form
.
fields
:
attr
=
form
.
fields
[
name
]
else
:
else
:
message
=
"Unable to lookup '
%
s' on
%
s"
%
(
name
,
model
.
_meta
.
object_name
)
message
=
"Unable to lookup '
%
s' on
%
s"
%
(
name
,
model
.
_meta
.
object_name
)
if
model_admin
:
if
model_admin
:
message
+=
" or
%
s"
%
(
model_admin
.
__class__
.
__name__
,)
message
+=
" or
%
s"
%
(
model_admin
.
__class__
.
__name__
,)
if
form
:
message
+=
" or
%
s"
%
form
.
__class__
.
__name__
raise
AttributeError
(
message
)
raise
AttributeError
(
message
)
if
hasattr
(
attr
,
"short_description"
):
if
hasattr
(
attr
,
"short_description"
):
...
...
docs/releases/2.1.1.txt
Dosyayı görüntüle @
d311124b
...
@@ -38,3 +38,6 @@ Bugfixes
...
@@ -38,3 +38,6 @@ Bugfixes
* Made the admin change view redirect to the changelist view after a POST if
* Made the admin change view redirect to the changelist view after a POST if
the user has the 'view' permission (:ticket:`29663`).
the user has the 'view' permission (:ticket:`29663`).
* Fixed admin change view crash for view-only users if the form has an extra
form field (:ticket:`29682`).
tests/admin_utils/tests.py
Dosyayı görüntüle @
d311124b
...
@@ -286,6 +286,22 @@ class UtilsTests(SimpleTestCase):
...
@@ -286,6 +286,22 @@ class UtilsTests(SimpleTestCase):
(
"not Really the Model"
,
MockModelAdmin
.
test_from_model
)
(
"not Really the Model"
,
MockModelAdmin
.
test_from_model
)
)
)
def
test_label_for_field_form_argument
(
self
):
class
ArticleForm
(
forms
.
ModelForm
):
extra_form_field
=
forms
.
BooleanField
()
class
Meta
:
fields
=
'__all__'
model
=
Article
self
.
assertEqual
(
label_for_field
(
'extra_form_field'
,
Article
,
form
=
ArticleForm
()),
'Extra form field'
)
msg
=
"Unable to lookup 'nonexistent' on Article or ArticleForm"
with
self
.
assertRaisesMessage
(
AttributeError
,
msg
):
label_for_field
(
'nonexistent'
,
Article
,
form
=
ArticleForm
()),
def
test_label_for_property
(
self
):
def
test_label_for_property
(
self
):
# NOTE: cannot use @property decorator, because of
# NOTE: cannot use @property decorator, because of
# AttributeError: 'property' object has no attribute 'short_description'
# AttributeError: 'property' object has no attribute 'short_description'
...
...
tests/admin_views/admin.py
Dosyayı görüntüle @
d311124b
...
@@ -91,6 +91,14 @@ class ChapterXtra1Admin(admin.ModelAdmin):
...
@@ -91,6 +91,14 @@ class ChapterXtra1Admin(admin.ModelAdmin):
)
)
class
ArticleForm
(
forms
.
ModelForm
):
extra_form_field
=
forms
.
BooleanField
(
required
=
False
)
class
Meta
:
fields
=
'__all__'
model
=
Article
class
ArticleAdmin
(
admin
.
ModelAdmin
):
class
ArticleAdmin
(
admin
.
ModelAdmin
):
list_display
=
(
list_display
=
(
'content'
,
'date'
,
callable_year
,
'model_year'
,
'modeladmin_year'
,
'content'
,
'date'
,
callable_year
,
'model_year'
,
'modeladmin_year'
,
...
@@ -101,10 +109,11 @@ class ArticleAdmin(admin.ModelAdmin):
...
@@ -101,10 +109,11 @@ class ArticleAdmin(admin.ModelAdmin):
list_filter
=
(
'date'
,
'section'
)
list_filter
=
(
'date'
,
'section'
)
autocomplete_fields
=
(
'section'
,)
autocomplete_fields
=
(
'section'
,)
view_on_site
=
False
view_on_site
=
False
form
=
ArticleForm
fieldsets
=
(
fieldsets
=
(
(
'Some fields'
,
{
(
'Some fields'
,
{
'classes'
:
(
'collapse'
,),
'classes'
:
(
'collapse'
,),
'fields'
:
(
'title'
,
'content'
)
'fields'
:
(
'title'
,
'content'
,
'extra_form_field'
),
}),
}),
(
'Some other fields'
,
{
(
'Some other fields'
,
{
'classes'
:
(
'wide'
,),
'classes'
:
(
'wide'
,),
...
...
tests/admin_views/tests.py
Dosyayı görüntüle @
d311124b
...
@@ -1768,6 +1768,7 @@ class AdminViewPermissionsTest(TestCase):
...
@@ -1768,6 +1768,7 @@ class AdminViewPermissionsTest(TestCase):
response
=
self
.
client
.
get
(
article_change_url
)
response
=
self
.
client
.
get
(
article_change_url
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
context
[
'title'
],
'View article'
)
self
.
assertEqual
(
response
.
context
[
'title'
],
'View article'
)
self
.
assertContains
(
response
,
'<label>Extra form field:</label>'
)
self
.
assertContains
(
response
,
'<a href="/test_admin/admin/admin_views/article/" class="closelink">Close</a>'
)
self
.
assertContains
(
response
,
'<a href="/test_admin/admin/admin_views/article/" class="closelink">Close</a>'
)
post
=
self
.
client
.
post
(
article_change_url
,
change_dict
)
post
=
self
.
client
.
post
(
article_change_url
,
change_dict
)
self
.
assertEqual
(
post
.
status_code
,
302
)
self
.
assertEqual
(
post
.
status_code
,
302
)
...
...
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