Skip to content

Commit ee29c85

Browse files
Merge pull request #1439 from samuelveigarangel/fix/editorial-board-admin-role-lookup
Fix: Editorial Board Admin role lookup
2 parents 328bd56 + ed5aab3 commit ee29c85

1 file changed

Lines changed: 55 additions & 31 deletions

File tree

editorialboard/models.py

Lines changed: 55 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,22 @@ class EditorialBoardMember(CommonControlField, ClusterableModel, Orderable):
2626
Journal, related_name="editorial_board_member_journal", null=True
2727
)
2828
researcher = models.ForeignKey(
29-
NewResearcher, null=True, blank=True, related_name="+", on_delete=models.SET_NULL
29+
NewResearcher,
30+
null=True,
31+
blank=True,
32+
related_name="+",
33+
on_delete=models.SET_NULL,
3034
)
3135
image = models.ForeignKey(
32-
"wagtailimages.Image",
36+
"wagtailimages.Image",
3337
null=True,
3438
blank=True,
3539
on_delete=models.SET_NULL,
3640
related_name="+",
3741
help_text=_("Upload a profile photo of the editorial board member."),
3842
)
3943
area = models.TextField(null=True, blank=True)
40-
44+
4145
# Manual input fields for creating/updating researcher data
4246
manual_given_names = models.CharField(
4347
_("Given names"),
@@ -116,7 +120,7 @@ class EditorialBoardMember(CommonControlField, ClusterableModel, Orderable):
116120
null=True,
117121
help_text=_("Enter email address"),
118122
)
119-
123+
120124
class Meta:
121125
unique_together = [("journal", "researcher")]
122126
indexes = [
@@ -165,21 +169,30 @@ def __str__(self):
165169
if self.researcher:
166170
return f"{self.researcher.fullname} {', '.join(self.role_names)}"
167171
elif self.manual_given_names or self.manual_last_name:
168-
name = f"{self.manual_given_names or ''} {self.manual_last_name or ''}".strip()
169-
return f"{name} {', '.join(self.role_names)}" if name else "Editorial Board Member"
172+
name = (
173+
f"{self.manual_given_names or ''} {self.manual_last_name or ''}".strip()
174+
)
175+
return (
176+
f"{name} {', '.join(self.role_names)}"
177+
if name
178+
else "Editorial Board Member"
179+
)
170180
return "Editorial Board Member"
171181

172182
@property
173183
def role_names(self):
174184
return [
175185
role.role_name
176-
for role in self.role_editorial_board.filter(role__role__isnull=False)
186+
for role in self.role_editorial_board.all()
187+
if role.role_id is not None
177188
]
178189

179190
@staticmethod
180191
def autocomplete_custom_queryset_filter(search_term):
181-
return EditorialBoardMember.objects.filter(researcher__fullname__icontains=search_term).prefetch_related("researcher")
182-
192+
return EditorialBoardMember.objects.filter(
193+
researcher__fullname__icontains=search_term
194+
).prefetch_related("researcher")
195+
183196
def autocomplete_label(self):
184197
return str(self)
185198

@@ -194,8 +207,10 @@ def _get(
194207
researcher=researcher,
195208
)
196209
if researcher and journal:
197-
return cls.objects.get(**params)
198-
raise ValueError("EditorialBoardMember._get requires journal and researcher and role")
210+
return cls.objects.get(**params)
211+
raise ValueError(
212+
"EditorialBoardMember._get requires journal and researcher and role"
213+
)
199214

200215
@classmethod
201216
def _create(
@@ -214,21 +229,25 @@ def _create(
214229
return obj
215230
except IntegrityError:
216231
return cls._get(journal, researcher)
217-
raise ValueError("EditorialBoardMember._create requires journal and researcher and role")
232+
raise ValueError(
233+
"EditorialBoardMember._create requires journal and researcher and role"
234+
)
218235

219236
@classmethod
220237
def _create_or_update(
221238
cls,
222239
user,
223240
journal,
224-
researcher,
241+
researcher,
225242
):
226243
if researcher and journal:
227244
try:
228245
return cls._get(journal, researcher)
229246
except cls.DoesNotExist:
230247
return cls._create(user, journal, researcher)
231-
raise ValueError("EditorialBoardMember._create requires journal and researcher and journal")
248+
raise ValueError(
249+
"EditorialBoardMember._create requires journal and researcher and journal"
250+
)
232251

233252
@classmethod
234253
def create_or_update(
@@ -241,7 +260,7 @@ def create_or_update(
241260
editorial_board_initial_year=None,
242261
editorial_board_final_year=None,
243262
):
244-
263+
245264
role = None
246265
if std_role or declared_role:
247266
role = RoleModel.create_or_update(
@@ -275,18 +294,21 @@ def _get_journal(journal_title):
275294
@classmethod
276295
def get_editorial_board_with_role(cls, journal):
277296
editorial_board_by_latest_role = {}
278-
editorial_board_members = cls.objects.filter(journal=journal) \
279-
.prefetch_related(
280-
"role_editorial_board",
281-
"researcher__orcid",
282-
"researcher__affiliation__location"
283-
)
297+
editorial_board_members = cls.objects.filter(journal=journal).prefetch_related(
298+
"role_editorial_board",
299+
"researcher__orcid",
300+
"researcher__affiliation__location",
301+
)
284302
for member in editorial_board_members:
285-
member_role = member.role_editorial_board.filter(
286-
role__role__std_role__isnull=False
287-
).order_by("-initial_year").first()
303+
member_role = (
304+
member.role_editorial_board.filter(role__std_role__isnull=False)
305+
.order_by("-initial_year")
306+
.first()
307+
)
288308
researcher = member.researcher
289-
editorial_board_by_latest_role[member_role.role_name].append(researcher.data)
309+
editorial_board_by_latest_role[member_role.role_name].append(
310+
researcher.data
311+
)
290312
return editorial_board_by_latest_role
291313

292314

@@ -323,7 +345,7 @@ def get(
323345
role,
324346
initial_year,
325347
final_year,
326-
):
348+
):
327349
params = dict(
328350
editorial_board=editorial_board_member,
329351
role=role,
@@ -332,16 +354,18 @@ def get(
332354
)
333355
if editorial_board_member and role:
334356
return cls.objects.get(**params)
335-
raise ValueError("RoleEditorialBoard.get requires editorial_board_member and role")
336-
357+
raise ValueError(
358+
"RoleEditorialBoard.get requires editorial_board_member and role"
359+
)
360+
337361
@classmethod
338362
def create(
339363
cls,
340364
editorial_board_member,
341365
role,
342366
initial_year,
343367
final_year,
344-
):
368+
):
345369
obj = cls()
346370
obj.editorial_board = editorial_board_member
347371
obj.role = role
@@ -357,7 +381,7 @@ def create_or_update(
357381
role,
358382
initial_year,
359383
final_year,
360-
):
384+
):
361385
try:
362386
return cls.get(editorial_board_member, role, initial_year, final_year)
363387
except cls.DoesNotExist:
@@ -469,7 +493,7 @@ def _create(
469493
obj.std_role = std_role
470494
obj.save()
471495
return obj
472-
except IntegrityError as e:
496+
except IntegrityError:
473497
return cls.objects.get(declared_role=declared_role, std_role=std_role)
474498

475499
raise ValueError("RoleModel.create requires declared_role or std_role")

0 commit comments

Comments
 (0)