Python Django REST框架-序列化程序don';看不见田野

Python Django REST框架-序列化程序don';看不见田野,python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我想创建一个用户,它持有他的国家的外键。 显然,我想把它设为必填字段 但当我发送不带“country”字段的POST请求时,DRF序列化程序不会抛出错误 代码中没有允许字段为空的地方,它与其他字段相同 我更进一步,在我的ModelViewSet的create()方法中,我决定打印serializer.validated\u data class用户视图集(ModelViewSet): serializer\u class=UserSerializer queryset=User.objects.

我想创建一个用户,它持有他的国家的外键。 显然,我想把它设为必填字段

但当我发送不带“country”字段的POST请求时,DRF序列化程序不会抛出错误

代码中没有允许字段为空的地方,它与其他字段相同

我更进一步,在我的
ModelViewSet
create()
方法中,我决定打印
serializer.validated\u data

class用户视图集(ModelViewSet):
serializer\u class=UserSerializer
queryset=User.objects.all()
权限\u类=[]
def create(自我、请求、格式=无):
serializer=self.get\u序列化程序(data=request.data)
如果序列化程序.u有效():
打印(serializer.data)
我发送以下邮件请求:

和我的
序列化程序。验证的\u数据
值为:

OrderedDict([('password', 'test1231112'), ('first_name', 'Jarosław'), ('last_name', 'Psikuta'), ('phone', '2999111331'), ('email', 'rweww@gmail.css'), ('description', 'fajny uzytkownik'), ('address', 'Mieszka 3/4'), ('date_of_birth', datetime.date(1997, 10, 13))])
我意识到序列化程序根本看不到我的
country
字段

我已经编写了一些代码来检查我的
国家/地区
字段是否存在:

country\u code=request.data.get('country',无)
如果不是国家/地区代码:
返回响应({'country':'This field is required'},status=status.HTTP\u 400\u BAD\u请求)
但我知道这是错误的方法。这是额外的代码,实际上序列化程序应该为我完成这项工作

这里是我的代码的其余部分:

序列化程序.py

class UserSerializer(serializers.ModelSerializer):
类元:
模型=用户
字段='\uuuu所有\uuuu'
只读字段=(“id”、“上次登录”、“超级用户”、“工作人员”、“活动日期”、“加入日期”、“组”、“用户权限”)
额外费用={
'password':{'write_only':True}
}
深度=1
def创建(自我验证的_数据):
password=validated_data.pop('password'))
用户=用户(**已验证的_数据)
user.set_密码(password)
user.save()
返回用户
models.py

类用户(抽象用户):
员工类型=[
('R','Regular'),
(“S”、“专家”)
]
用户名\验证程序=无
用户名=无
first_name=models.CharField(u('first name'),最大长度=30)
last_name=models.CharField(u('last name'),最大长度=150)
phone=models.CharField(最大长度=15,唯一性=True)
employee\u type=models.CharField(最大长度=1,选项=employee\u type,默认值为R)
email=models.EmailField(_('email address'),unique=True,max_length=255)
description=models.CharField(blank=True,max_length=500,default='')
地址=models.CharField(最大长度=100)
出生日期=models.DateField(null=True)
country=models.ForeignKey(country,on_delete=models.CASCADE,related_name='users'))
用户名\字段='电子邮件'
必填字段=[“姓名”、“姓氏”、“出生日期”、“地址”、“电话”、“国家”]

我从serializer元类中删除了
depth=1
,它正常工作。

您检查了序列化程序吗。您还应该在它上面声明country字段并调试它的行为。