class RepositoryVersionSerializer(ModelSerializer, NestedHyperlinkedModelSerializer): _href = NestedHyperlinkedIdentityField( view_name='versions-detail', lookup_field='number', parent_lookup_kwargs={'repository_pk': 'repository__pk'}, ) _content_href = NestedHyperlinkedIdentityField( view_name='versions-content', lookup_field='number', parent_lookup_kwargs={'repository_pk': 'repository__pk'}, ) _added_href = NestedHyperlinkedIdentityField( view_name='versions-added-content', lookup_field='number', parent_lookup_kwargs={'repository_pk': 'repository__pk'}, ) _removed_href = NestedHyperlinkedIdentityField( view_name='versions-removed-content', lookup_field='number', parent_lookup_kwargs={'repository_pk': 'repository__pk'}, ) number = serializers.IntegerField(read_only=True) content_summary = serializers.DictField(help_text=_( 'A list of counts of each type of content in this version.'), read_only=True) add_content_units = serializers.ListField(help_text=_( 'A list of content units to add to a new repository version'), write_only=True) remove_content_units = serializers.ListField(help_text=_( 'A list of content units to remove from the latest repository version' ), write_only=True) base_version = NestedHyperlinkedRelatedField( required=False, help_text=_( 'A repository version whose content will be used as the initial set of content ' 'for the new repository version'), queryset=models.RepositoryVersion.objects.all(), view_name='versions-detail', lookup_field='number', parent_lookup_kwargs={'repository_pk': 'repository__pk'}, ) class Meta: model = models.RepositoryVersion fields = ModelSerializer.Meta.fields + ( '_href', '_content_href', '_added_href', '_removed_href', 'number', 'content_summary', 'add_content_units', 'remove_content_units', 'base_version')
class MinimalisticKanbanBoardColumnTaskAssignmentSerializer( BaseModelSerializer): """ KanbanBoardColumnSerializer for the kanban board column task assignment """ class Meta: model = KanbanBoardColumnTaskAssignment fields = ( 'pk', 'kanban_board', 'kanban_board_column', 'url', ) kanban_board = InternalKanbanBoardSerializer( read_only=True, many=False, source='kanban_board_column.kanban_board') kanban_board_column = InternalKanbanBoardColumnSerializer(read_only=True, many=False) url = NestedHyperlinkedIdentityField( view_name='kanbanboard-tasks-detail', parent_lookup_kwargs={ 'kanbanboard_pk': 'kanban_board_column__kanban_board__pk' }, lookup_url_kwarg='pk', lookup_field='pk')
class ZaakBesluitSerializer(serializers.Serializer): """ Serializer the reverse relation between Besluit-Zaak. We use the UUID of the Besluit to generate the URL/UUID of the ZaakBesluit instance, since it's a FK relationship, we can safely do this. Effectively, we're feeding the :class:`Besluit` instance to this serializer. """ url = NestedHyperlinkedIdentityField( view_name="zaakbesluit-detail", lookup_field="uuid", parent_lookup_kwargs={"zaak_uuid": "zaak__uuid"}, read_only=True, ) uuid = serializers.UUIDField( help_text=_("Unieke resource identifier (UUID4)"), read_only=True) besluit = LengthHyperlinkedRelatedField( queryset=Besluit.objects.all(), view_name="besluit-detail", lookup_field="uuid", min_length=1, max_length=1000, help_text=_( "URL-referentie naar het BESLUIT (in de Besluiten API), waar " "ook de relatieinformatie opgevraagd kan worden."), ) def validate_besluit(self, besluit: Besluit): zaak = self.context["view"]._get_zaak() if not besluit.zaak == zaak: raise serializers.ValidationError( _("Het Besluit verwijst niet naar de juiste zaak"), code="invalid-zaak") return besluit
class RuneInstanceSerializer(serializers.ModelSerializer): url = NestedHyperlinkedIdentityField( view_name='profile/runes-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) # owner = serializers.HyperlinkedRelatedField(view_name='profiles-detail', source='owner.user.username', read_only=True) # TODO: Fix owner field so as not to cause a query explosion class Meta: model = RuneInstance fields = [ 'id', 'url', 'com2us_id', 'assigned_to', 'type', 'slot', 'stars', 'level', 'quality', 'original_quality', 'value', 'substat_upgrades_remaining', 'efficiency', 'max_efficiency', 'main_stat', 'main_stat_value', 'innate_stat', 'innate_stat_value', 'substat_1', 'substat_1_value', 'substat_1_craft', 'substat_2', 'substat_2_value', 'substat_2_craft', 'substat_3', 'substat_3_value', 'substat_3_craft', 'substat_4', 'substat_4_value', 'substat_4_craft', ] def create(self, validated_data): validated_data['owner'] = self.context['request'].user.summoner return super(RuneInstanceSerializer, self).create(validated_data)
class IssueCommentSerializer(serializers.HyperlinkedModelSerializer): issue = NestedHyperlinkedRelatedField( view_name="issues-detail", read_only=True, parent_lookup_kwargs={"lab_pk": "lab__pk"}, lookup_url_kwarg="number", ) url = NestedHyperlinkedIdentityField( view_name="issue-comments-detail", parent_lookup_kwargs={ "lab_pk": "issue__lab__pk", "issue_number": "issue__number", }, ) def create(self, validated_data): context_kwargs = self.context["view"].kwargs issue = Issue.objects.get(lab=context_kwargs["lab_pk"], number=context_kwargs["issue_number"]) instance = IssueComment.objects.create(**validated_data, issue=issue) # instance.issue = return instance class Meta: model = IssueComment fields = ["id", "url", "issue", "body", "created", "deleted"] read_only_fields = ["created"]
class ArtifactInstanceSerializer(serializers.ModelSerializer, AddOwnerOnCreate): url = NestedHyperlinkedIdentityField( view_name='profile/artifacts-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) precise_slot = serializers.CharField(source='get_precise_slot_display') class Meta: model = ArtifactInstance fields = ( 'id', 'url', 'com2us_id', 'assigned_to', 'rta_assigned_to', 'slot', 'element', 'archetype', 'precise_slot', 'level', 'quality', 'original_quality', 'efficiency', 'max_efficiency', 'main_stat', 'main_stat_value', 'effects', 'effects_value', 'effects_upgrade_count', 'effects_reroll_count', )
class StarSerializer(FlexFieldsSerializerMixin, serializers.HyperlinkedModelSerializer): """ Serializes and deserializes a Star for a Point. Validates each deserialized field. """ _url = NestedHyperlinkedIdentityField( read_only=True, view_name='point-star-detail', parent_lookup_kwargs={'point_pk': 'point__pk'}) point = wrap_url(serializers.HyperlinkedRelatedField)( read_only=True, view_name='point-detail') creator = wrap_url(serializers.HyperlinkedRelatedField)( read_only=True, view_name='user-detail') class Meta: model = Star fields = ('_url', 'id', 'created', 'point', 'creator') expandable_fields = { 'creator': (CreatorSerializer, { 'source': 'creator' }), }
class FormResponseSerializer(serializers.HyperlinkedModelSerializer): url = NestedHyperlinkedIdentityField(view_name='form-response-detail', lookup_field='id', parent_lookup_kwargs={ 'form_slug': 'form__slug', }) form = relations.HyperlinkedRelatedField(view_name='form-detail', read_only=True, lookup_field='slug') def create(self, validated_data): form = Form.objects.get(slug=self.context['view'].kwargs['form_slug']) validated_data['form'] = form return super().create(validated_data) class Meta: fields = ( 'url', 'form', 'values', # 'created_by', 'created_at', 'updated_at', ) read_only_fields = ( 'created_at', 'updated_at', ) model = FormResponse
class RuneInstanceSerializer(serializers.ModelSerializer, AddOwnerOnCreate): url = NestedHyperlinkedIdentityField( view_name='profile/runes-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) class Meta: model = RuneInstance fields = [ 'id', 'url', 'com2us_id', 'assigned_to', 'type', 'slot', 'stars', 'level', 'quality', 'original_quality', 'value', 'substat_upgrades_remaining', 'efficiency', 'max_efficiency', 'main_stat', 'main_stat_value', 'innate_stat', 'innate_stat_value', 'substats', 'substat_values', 'substats_enchanted', 'substats_grind_value', ]
class RuneBuildSerializer(serializers.ModelSerializer, AddOwnerOnCreate): url = NestedHyperlinkedIdentityField( view_name='profile/rune-builds-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) runes = RuneInstanceSerializer(many=True, read_only=True) class Meta: model = RuneBuild fields = [ 'id', 'url', 'name', 'monster', 'runes', 'hp', 'hp_pct', 'attack', 'attack_pct', 'defense', 'defense_pct', 'speed', 'speed_pct', 'crit_rate', 'crit_damage', 'resistance', 'accuracy', 'avg_efficiency', ]
class PensumBasicThresholdFactorSerializer(NestedHyperlinkedModelSerializer): class Meta: model = PensumBasicThresholdFactors fields = [ 'url', 'pk', 'name', 'factor_type', 'value', # hidden 'pensum' ] parent_lookup_kwargs = { 'schedule_slug': 'pensum__schedule__slug', 'pensums_employee': 'pensum__employee__abbreviation' } url = NestedHyperlinkedIdentityField( view_name='pensum-factors-detail', lookup_field='pk', parent_lookup_kwargs=parent_lookup_kwargs) pensum = ParentHiddenRelatedField(queryset=Pensum.objects.all(), parent_lookup_kwargs={ 'schedule_slug': 'schedule__slug', 'pensums_employee': 'employee__abbreviation' })
class IssueSerializer(serializers.HyperlinkedModelSerializer): comments = NestedHyperlinkedIdentityField( view_name="issue-comments-list", parent_lookup_kwargs={"lab_pk": "lab__pk"}, lookup_url_kwarg="issue_number", ) url = NestedHyperlinkedIdentityField( view_name="issues-detail", parent_lookup_kwargs={"lab_pk": "lab__pk"}, lookup_field="number", ) description = serializers.CharField(max_length=MAX_BODY_TEXT_LENGTH, allow_blank=True, required=False) experiments = NestedHyperlinkedRelatedField( many=True, queryset=Experiment.objects.all(), view_name="experiments-detail", parent_lookup_kwargs={"lab_pk": "lab__pk"}, lookup_url_kwarg="number", lookup_field="number", required=False, ) def create(self, validated_data): context_kwargs = self.context["view"].kwargs lab = Lab.objects.get(pk=context_kwargs["lab_pk"]) instance = Issue.objects.create(**validated_data, lab=lab) return instance class Meta: model = Issue fields = [ "number", "id", "url", "state", "title", "description", "created", "comments", "experiments", "lab", "deleted", ] read_only_fields = ["lab", "created"]
class MaterialStorageSerializer(serializers.ModelSerializer, AddOwnerOnCreate): url = NestedHyperlinkedIdentityField( view_name='profile/storage-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) class Meta: model = MaterialStorage fields = ['id', 'url', 'item', 'quantity']
class MonsterPieceSerializer(serializers.ModelSerializer, AddOwnerOnCreate): url = NestedHyperlinkedIdentityField( view_name='profile/monster-pieces-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) class Meta: model = MonsterPiece fields = ['id', 'url', 'monster', 'pieces']
class ParticipantNestedSerializer(ModelSerializer): """Serializer for fully nested Participant object.""" url = NestedHyperlinkedIdentityField( view_name="participants-detail", parent_lookup_kwargs={"event_pk": "event__pk"}) class Meta: model = Participant exclude = ["event"]
class ParticipantSerializer(EventResourceSerializer): """Serializer for Participant object.""" url = NestedHyperlinkedIdentityField( view_name="participants-detail", parent_lookup_kwargs={"event_pk": "event__pk"}) class Meta: model = Participant fields = "__all__"
class BuildingInstanceSerializer(serializers.ModelSerializer, AddOwnerOnCreate): url = NestedHyperlinkedIdentityField( view_name='profile/buildings-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) class Meta: model = BuildingInstance fields = ['id', 'url', 'building', 'level']
class BillSerializer(EventResourceSerializer): """Serializer for Bill object.""" url = NestedHyperlinkedIdentityField( view_name="bills-detail", parent_lookup_kwargs={"event_pk": "event__pk"}) participants = ParticipantField(many=True, validators=[]) class Meta: model = Bill fields = "__all__"
class BillNestedSerializer(ModelSerializer): """Serializer for fully nested Bill object.""" url = NestedHyperlinkedIdentityField( view_name="bills-detail", parent_lookup_kwargs={"event_pk": "event__pk"}) participants = ParticipantField(many=True) class Meta: model = Bill fields = "__all__"
class BenchmarkSerializer(serializers.HyperlinkedModelSerializer): url = NestedHyperlinkedIdentityField( view_name='benchmark-detail', parent_lookup_kwargs={'repo': 'repository__id'}) repository = HyperlinkedRelatedField(read_only=True, view_name='repository-detail') class Meta: model = Benchmark fields = (URL, 'repository', 'measurement_name', 'percentile_25', 'percentile_50', 'upper_threshold', 'num_cases')
class MonsterInstanceSerializer(serializers.ModelSerializer): url = NestedHyperlinkedIdentityField( view_name='profile/monsters-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) # owner = serializers.HyperlinkedRelatedField(view_name='profiles-detail', source='owner.user.username', read_only=True) # TODO: Fix owner field so as not to cause a query explosion runes = RuneInstanceSerializer(many=True, read_only=True, source='runeinstance_set') class Meta: model = MonsterInstance fields = [ 'id', 'url', 'com2us_id', 'created', 'monster', 'custom_name', 'stars', 'level', 'skill_1_level', 'skill_2_level', 'skill_3_level', 'skill_4_level', 'base_hp', 'base_attack', 'base_defense', 'base_speed', 'base_crit_rate', 'base_crit_damage', 'base_resistance', 'base_accuracy', 'rune_hp', 'rune_attack', 'rune_defense', 'rune_speed', 'rune_crit_rate', 'rune_crit_damage', 'rune_resistance', 'rune_accuracy', 'avg_rune_efficiency', 'fodder', 'in_storage', 'ignore_for_fusion', 'priority', 'notes', 'runes', ] def create(self, validated_data): validated_data['owner'] = self.context['request'].user.summoner return super(MonsterInstanceSerializer, self).create(validated_data)
class PaymentNestedSerializer(ModelSerializer): """Serializer for fully nested Payment object.""" url = NestedHyperlinkedIdentityField( view_name="payments-detail", parent_lookup_kwargs={"event_pk": "event__pk"}) issuer = ParticipantField() acquirer = ParticipantField() class Meta: model = Payment fields = "__all__"
class BenchmarkDescriptionSerializer(serializers.HyperlinkedModelSerializer): url = NestedHyperlinkedIdentityField( view_name='benchmark_description-detail', parent_lookup_kwargs={'repo': 'repository__id'}) repository = HyperlinkedRelatedField(read_only=True, view_name='repository-detail') class Meta: model = BenchmarkDescription fields = (URL, 'repository', 'num_projects', 'selection_type', 'date', 'project_data')
class BuildingInstanceSerializer(serializers.ModelSerializer): url = NestedHyperlinkedIdentityField( view_name='profile/buildings-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) class Meta: model = BuildingInstance fields = ['id', 'url', 'building', 'level'] def create(self, validated_data): validated_data['owner'] = self.context['request'].user.summoner return super(BuildingInstanceSerializer, self).create(validated_data)
class RuneCraftInstanceSerializer(serializers.ModelSerializer): url = NestedHyperlinkedIdentityField( view_name='profile/rune-crafts-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) class Meta: model = RuneCraftInstance fields = ['id', 'url', 'com2us_id', 'type', 'rune', 'stat', 'quality', 'value'] def create(self, validated_data): validated_data['owner'] = self.context['request'].user.summoner return super(RuneCraftInstanceSerializer, self).create(validated_data)
class MonsterPieceSerializer(serializers.ModelSerializer): url = NestedHyperlinkedIdentityField( view_name='profile/monster-pieces-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) class Meta: model = MonsterPiece fields = ['id', 'url', 'monster', 'pieces'] def create(self, validated_data): validated_data['owner'] = self.context['request'].user.summoner return super(MonsterPieceSerializer, self).create(validated_data)
class CommentsDetailSerializer(serializers.ModelSerializer): # post_pk: url에서 받는 인자, 'post__pk': parent model의 기본키 접근을 위한 ORM 문법 url = NestedHyperlinkedIdentityField( view_name='lostboard:posts_comments-detail', parent_lookup_kwargs={'post_pk': 'post__pk'}) class Meta: model = Comment fields = '__all__' extra_kwargs = { 'password': { 'write_only': True }, }
class TeamSerializer(serializers.ModelSerializer): url = NestedHyperlinkedIdentityField( view_name='profile/teams-detail', parent_lookup_kwargs={ 'user_pk': 'group__owner__user__username', }, ) class Meta: model = Team fields = [ 'id', 'url', 'group', 'favorite', 'name', 'description', 'leader', 'roster' ]
class TeamGroupSerializer(serializers.ModelSerializer, AddOwnerOnCreate): url = NestedHyperlinkedIdentityField( view_name='profile/team-groups-detail', parent_lookup_kwargs={'user_pk': 'owner__user__username'}, ) teams = serializers.PrimaryKeyRelatedField( read_only=True, many=True, source='team_set', ) class Meta: model = TeamGroup fields = ['id', 'url', 'name', 'teams']
class TODOItemSerializer(serializers.ModelSerializer): class Meta: model = TODOItem fields = ('url', 'id', 'todo_list', 'content', 'image', 'contact', 'completed') url = NestedHyperlinkedIdentityField( view_name='items-detail', parent_lookup_kwargs={'list_pk': 'todo_list__pk'}, ) todo_list = HyperlinkedRelatedField( read_only=True, view_name='todolist-detail', )