Исправить sdkmanager java.lang.NoClassDefFoundError пакетный файл

Как и @DanEEStart, DjangoRestFramework не имеет простого способа расширить значение «все» для полей, потому что методы get_field_names, похоже, предназначены для для работы .

Но, к счастью, вы можете переопределить этот метод, чтобы обеспечить простой способ включения всех полей и отношений без перечисления нескольких полей.

Я переопределяю этот метод следующим образом:

class ToppingSerializer(serializers.ModelSerializer):

    class Meta:
        model = Topping
        fields = '__all__'
        extra_fields = ['pizzas']

    def get_field_names(self, declared_fields, info):
        expanded_fields = super(ToppingSerializer, self).get_field_names(declared_fields, info)

        if getattr(self.Meta, 'extra_fields', None):
            return expanded_fields + self.Meta.extra_fields
        else:
            return expanded_fields

Обратите внимание, что этот метод только изменяет поведение этого сериализатора, а атрибут extra_fields работает только с этим классом сериализатора.

Если у вас есть тонна сериализатора, подобная этому, вы можете создать промежуточный класс для включения этого метода get_fields_names в одном месте и повторного использования много раз. Некоторым это нравится:

class CustomSerializer(serializers.HyperlinkedModelSerializer):

    def get_field_names(self, declared_fields, info):
        expanded_fields = super(CustomSerializer, self).get_field_names(declared_fields, info)

        if getattr(self.Meta, 'extra_fields', None):
            return expanded_fields + self.Meta.extra_fields
        else:
            return expanded_fields


class ToppingSerializer(CustomSerializer):

    class Meta:
        model = Topping
        fields = '__all__'
        extra_fields = ['pizzas']

class AnotherSerializer(CustomSerializer):

    class Meta:
        model = Post
        fields = '__all__'
        extra_fields = ['comments']

0
задан D. Sikilai 30 March 2019 в 23:31
поделиться

1 ответ

Вы можете попробовать это решение

Сначала откройте sdkmanager.bat в любом текстовом редакторе

Затем найдите эту строку

  %JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%

И измените ее на эту строку [116 ]

  %JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%

Надеюсь, это решит твою проблему.

0
ответ дан Amine 30 March 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: