Как использовать поле django -multiselect в почтальоне? - PullRequest
0 голосов
/ 27 мая 2020

Я использую pip-модуль MultiSelectField Вот моя модель

SALES_CHANNEL = [
    ('retailer', 'Retailer'),
    ('wholesaler', 'Wholesaler'),
    ('consumer', 'Consumer'),
    ('distributor', 'Distributor'),
    ('online', 'Online')
]

class ProductModel(basemodel.BaseModel):
    name = models.CharField(max_length=200)
    mrp = models.DecimalField(
        max_digits=10, decimal_places=2,
        null=True, blank=True
    )
    selling_price = models.DecimalField(
        max_digits=10, decimal_places=2,
        null=True, blank=True
    )
    upc = models.CharField(max_length=30, null=True, blank=True)
    dimensions = models.CharField(max_length=200, null=True, blank=True)
    weight = models.CharField(max_length=200, null=True, blank=True)
    sku = models.CharField(max_length=200, unique=True)
    product_type = models.CharField(
        max_length=30, choices=PRODUCT_TYPE, default='goods'
    )
    sales_channel = MultiSelectField(
        choices=SALES_CHANNEL, null=True, blank=True
    )

При создании продукта с почтальоном тело моего запроса:

{
    "name": "first unit",
    "sku": "first sales chann",
    "sales_channel":["retailer", "wholesaler"]

}

Но на serializer.is_valid () , Я получаю эту ошибку:

        "sales_channel": [
            "\"['retailer', 'wholesaler']\" is not a valid choice."
        ],

Как я могу опубликовать данные о почтальоне для мультиселектполя?

Ответы [ 2 ]

0 голосов
/ 14 июня 2020

Для этого вам нужно сменить сериализатор

from rest_framework import fields    

class CustomMultipleChoiceField(fields.MultipleChoiceField):
    def to_representation(self, value):
        return list(super().to_representation(value))

class YourSerializer(serializers.ModelSerializer):
    sales_channel = CustomMultipleChoiceField(choices=SALES_CHANNEL, required=False)

    class Meta:
        model = ProductModel
        fields = '__all__'
0 голосов
/ 27 мая 2020

Вы можете опубликовать sales_channel несколько раз в данных формы, например:

sales_channel: retailer sales_cahnnel: wholesaler

NB: не в исходных данных. Хорошо, позволь мне помочь тебе. Не могли бы вы добавить приведенные ниже данные в сериализатор перед метаданными, например:

class YourSerializer(serializers.ModelSerializer):
sales_channel = serializers.ListField()
     class Meta:
         model = YourModel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...