Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F88623558
admin.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Oct 19, 19:49
Size
7 KB
Mime Type
text/x-python
Expires
Mon, Oct 21, 19:49 (2 d)
Engine
blob
Format
Raw Data
Handle
21799707
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
admin.py
View Options
from
django.contrib
import
admin
from
datetime
import
date
from
import_export.admin
import
ImportExportModelAdmin
from
django.contrib.admin
import
TabularInline
#from inline_actions.admin import InlineActionsMixin
#from inline_actions.admin import InlineActionsModelAdminMixin
from
django.shortcuts
import
render
from
django.http
import
HttpResponseRedirect
from
.models
import
Country
from
.models
import
Language
from
.models
import
Issn
from
.models
import
Oa
from
.models
import
Publisher
from
.models
import
Journal
from
.models
import
Organization
from
.models
import
Version
from
.models
import
Licence
from
.models
import
Cost_factor_type
from
.models
import
Cost_factor
from
.models
import
Term
from
.models
import
ConditionType
from
.models
import
ConditionSet
from
.models
import
OrganizationCondition
from
.models
import
JournalCondition
# Register your models here.
@admin.register
(
Journal
)
class
JournalAdmin
(
ImportExportModelAdmin
):
list_display
=
(
"id"
,
"name"
,
"journal_issns"
,)
list_filter
=
(
'publisher__name'
,
'oa_status'
)
filter_horizontal
=
(
'publisher'
,
'language'
,
)
def
journal_issns
(
self
,
obj
):
# TBD
pass
@admin.register
(
Language
)
class
LanguageAdmin
(
ImportExportModelAdmin
):
pass
@admin.register
(
Organization
)
class
OrganizationAdmin
(
ImportExportModelAdmin
):
list_display
=
(
"id"
,
"name"
)
list_filter
=
(
'is_funder'
,)
filter_horizontal
=
(
'country'
,
)
@admin.register
(
Version
)
class
VersionAdmin
(
ImportExportModelAdmin
):
pass
@admin.register
(
Country
)
class
CountryAdmin
(
ImportExportModelAdmin
):
pass
@admin.register
(
Issn
)
class
IssnAdmin
(
ImportExportModelAdmin
):
list_filter
=
(
'issn_type'
,
)
@admin.register
(
Oa
)
class
OaAdmin
(
ImportExportModelAdmin
):
pass
@admin.register
(
Publisher
)
class
PublisherAdmin
(
ImportExportModelAdmin
):
list_display
=
(
"id"
,
"name"
)
# Experimental: what will happen with 200+ countries in the database?
list_filter
=
(
'country__name'
,
)
filter_horizontal
=
(
'country'
,
)
@admin.register
(
Term
)
class
TermAdmin
(
ImportExportModelAdmin
):
list_filter
=
(
'version'
,
'licence'
)
filter_horizontal
=
(
'version'
,
'cost_factor'
,
'licence'
,
)
@admin.register
(
ConditionType
)
class
ConditionTypeAdmin
(
ImportExportModelAdmin
):
list_display
=
(
"id"
,
"condition_issuer"
)
#class JournalConditionInline(InlineActionsMixin, TabularInline):
class
JournalConditionInline
(
TabularInline
):
model
=
JournalCondition
extra
=
1
inline_actions
=
[
'connect_all_journals'
]
def
connect_all_journals
(
self
,
request
,
obj
,
parent_obj
=
None
):
# Do stuff here, then return None to go to current view
return
None
connect_all_journals
.
short_description
=
(
"Connect Condition Set with all Journals"
)
class
OrganizationConditionInline
(
TabularInline
):
#class OrganizationConditionInline(InlineActionsMixin, TabularInline):
model
=
OrganizationCondition
extra
=
1
def
connect_with_all_journals
(
modeladmin
,
request
,
queryset
):
print
(
request
.
POST
)
if
request
.
POST
.
get
(
'apply'
):
try
:
valid_from
=
date
.
fromisoformat
(
request
.
POST
[
'valid_from'
])
valid_until
=
date
.
fromisoformat
(
request
.
POST
[
'valid_until'
])
if
valid_from
>
valid_until
:
raise
ValueError
# print((valid_from, valid_until))
all_journals
=
Journal
.
objects
.
all
()
for
condition_set
in
queryset
:
# print('-----------------')
# print(condition_set)
for
j
in
all_journals
:
print
(
j
)
# search for existing connections
existing_connections
=
JournalCondition
.
objects
.
filter
(
journal
=
j
,
condition_set
=
condition_set
,
valid_from__lt
=
date
.
today
(),
valid_until__gt
=
date
.
today
())
# print(existing_connections)
if
len
(
existing_connections
)
==
0
:
new_journal_condition
=
JournalCondition
(
journal
=
j
,
condition_set
=
condition_set
,
valid_from
=
valid_from
,
valid_until
=
valid_until
)
new_journal_condition
.
save
()
return
None
except
ValueError
:
pass
return
render
(
request
,
'admin/get_validity_dates.html'
,
context
=
{
'queryset'
:
queryset
,
'objects'
:
'journals'
})
connect_with_all_journals
.
short_description
=
'Apply selected condition sets to all Journals'
def
connect_with_all_organizations
(
modeladmin
,
request
,
queryset
):
print
(
request
.
POST
)
if
request
.
POST
.
get
(
'apply'
):
try
:
valid_from
=
date
.
fromisoformat
(
request
.
POST
[
'valid_from'
])
valid_until
=
date
.
fromisoformat
(
request
.
POST
[
'valid_until'
])
if
valid_from
>
valid_until
:
raise
ValueError
# print((valid_from, valid_until))
all_orgs
=
Organization
.
objects
.
all
()
for
condition_set
in
queryset
:
# print('-----------------')
# print(condition_set)
for
o
in
all_orgs
:
print
(
o
)
# search for existing connections
existing_connections
=
OrganizationCondition
.
objects
.
filter
(
organization
=
o
,
condition_set
=
condition_set
,
valid_from__lt
=
date
.
today
(),
valid_until__gt
=
date
.
today
())
# print(existing_connections)
if
len
(
existing_connections
)
==
0
:
new_organization_condition
=
OrganizationCondition
(
organization
=
o
,
condition_set
=
condition_set
,
valid_from
=
valid_from
,
valid_until
=
valid_until
)
new_organization_condition
.
save
()
return
None
except
ValueError
:
pass
return
render
(
request
,
'admin/get_validity_dates.html'
,
context
=
{
'queryset'
:
queryset
,
'objects'
:
'organizations'
})
connect_with_all_organizations
.
short_description
=
'Apply selected condition sets to all Organizations'
@admin.register
(
ConditionSet
)
class
ConditionSetAdmin
(
ImportExportModelAdmin
):
# class ConditionSetAdmin(InlineActionsModelAdminMixin, ImportExportModelAdmin):
list_display
=
(
"id"
,
"condition_type"
,
"comment"
)
search_fields
=
[
'organization__name'
,
'journal__name'
,
'comment'
]
list_filter
=
(
'condition_type'
,
)
filter_horizontal
=
(
'term'
,
)
inlines
=
(
OrganizationConditionInline
,
JournalConditionInline
,
)
actions
=
[
connect_with_all_journals
,
connect_with_all_organizations
]
@admin.register
(
OrganizationCondition
)
class
OrganizationConditionAdmin
(
ImportExportModelAdmin
):
list_display
=
(
"id"
,
"organization_name"
,
"condition_set"
,
"valid_from"
,
"valid_until"
)
list_filter
=
(
'condition_set__condition_type'
,
)
def
organization_name
(
self
,
obj
):
return
obj
.
organization
.
name
@admin.register
(
Licence
)
class
LicenceAdmin
(
ImportExportModelAdmin
):
pass
@admin.register
(
JournalCondition
)
class
JournalConditionAdmin
(
ImportExportModelAdmin
):
list_display
=
(
"id"
,
"journal_name"
,
"condition_set"
,
"valid_from"
,
"valid_until"
)
list_filter
=
(
'condition_set__condition_type'
,
)
def
journal_name
(
self
,
obj
):
return
obj
.
journal
.
name
# unsuccessful attempt
# def formfield_for_foreignkey(self, db_field, request, **kwargs):
# if db_field.name == "journal":
# kwargs["queryset"] = Journal.objects.filter(publisher__name__in=Publisher.objects.order_by().values('name').distinct())
# return super().formfield_for_foreignkey(db_field, request, **kwargs)
@admin.register
(
Cost_factor
)
class
Cost_factorAdmin
(
ImportExportModelAdmin
):
list_display
=
(
"id"
,
"comment"
,
"amount"
,
"symbol"
)
list_filter
=
(
'cost_factor_type'
,
'symbol'
)
@admin.register
(
Cost_factor_type
)
class
Cost_factor_typeAdmin
(
ImportExportModelAdmin
):
list_display
=
(
"id"
,
"name"
)
Event Timeline
Log In to Comment