Я пытаюсь создать конечную точку API RESTful для создания нового пользователя. И это то, что я вставил в свой serializer.py
class UserSerializer(serializers.ModelSerializer):
Class Meta:
model = User
field = ('name', 'division', 'image',)
extra_kwargs = {'division': {'required': False}}
def create(self, validated_data):
newUser = User.objects.create(
name = validated_data['name'],
division = validated_data['division']
image = validated_data['image']
)
return newUser;
Теперь то, что я хочу сделать, это сделать разделение необязательным, например, если разделение ввода - «Образование», тогда укажите, как образование - это моя таблица базы данных; Но сделайте его пустым, если нет ввода. Как можно это реализовать?






Вы можете попробовать это:
def create(self, validated_data):
division = None
if validated_data['division']:
division = validated_data['division']
newUser = User.objects.create(
name = validated_data['name'],
division = division
image = validated_data['image']
)
return newUser;
да. Я понял это. Но что, если у меня есть более 10 различных полей, которые могут быть пустыми, чем мне нужно создать оператор if для каждого из этих полей?
Чтобы сделать поле необязательным, вы можете использовать extra_kwargs dict. Чтобы это работало, поле должно быть явно объявлено в fields.
class FooSerializer(serializers.ModelSerializer):
...
class Meta:
...
fields = ('bar', 'baz',)
extra_kwargs = {'bar': {'required': False}}
В общем, старайтесь не использовать fields = '__all__' и вместо этого явно объявляйте поля. Это защитит вас от случайного воздействия на чувствительное поле в будущем.
Я действительно добавил это под полями, но это не работает. Я обновил свой код
Чтобы использовать extra_kwargs, вы должны явно указать поля, такие как fields = ('name', 'division', 'image',).
Не работает, даже если я указываю поле. Он по-прежнему будет запрашивать поле, когда я отправлю запрос POST.
Если поле не является обязательным в определении вашей модели (т.е. имеет
null=Trueиblank=True), вам не нужно ничего делать в сериализаторе. Можете выложить код своей моделиUser?