Полагаю, вам нужно изменить свой __init__()
вызов на это:
def __init__(self, instance=None, data=empty, **kwargs):
self.job_type = [complicated calculation that depends on inst values]
self.invoice_status = [complicated calculation that depends on inst values]
super(CalendarViewSerializer, self).__init__(**kwargs)
Я бы также рекомендовал переименовать ваш класс в CalendarViewSerializer
, чтобы его не перепутали с кем-либо еще.
Вы также можете перемещаться, переопределяя вызов __init__()
, передавая эти вычисления через контекст - затем работая с ними оттуда ... например,
serializer = CalendarViewSerializer(data=request.data, context={'job_type': ..., 'invoice_status': ...})
class CalendarViewSerializer(serializers.ModelSerializer):
booking_color = serializers.SerializerMethodField()
text_color = serializers.SerializerMethodField()
def get_booking_color(self, inst):
if self.context['invoice_status'] == 1:
if self.context['job_type'] == 1:
return "#000"
elif self.context['job_type'] == 2:
return "#f1c40f"
elif self.context['job_type'] == 3:
return "#fff"
else:
return '#faase4'
def get_text_color(self, inst):
if self.context['invoice_status'] == 2:
if self.context['job_type'] == 1:
return "#bbff33"
elif self.context['job_type'] == 2:
return "#272844"
elif self.context['job_type'] == 3:
return "#2c0716"
else:
return '#fff'
Как дополнительный бонус, я полагаю, вы могли бы использовать какой-то объект dict()
/ {}
для возврата шестнадцатеричных кодов из поиска ключей, а не операторы if elseif elseif else
.