Django==1.5.5
djangorestframework==2.3.8
我有一个带有外键的模型:
class Role(models.Model):
name = models.CharField("Name", unique=True)
def __unicode__(self):
return unicode(_(self.name))
class Worker(models.Model):
name = models.CharField("Name")
role = models.ForeignKey(Role, default=1)
我向此模型添加 REST api:
class WorkerSerializer(serializers.ModelSerializer):
role = serializers.PrimaryKeyRelatedField(required=False, read_only=False)
class Meta:
model = Worker
class WorkerAPIList(generics.ListCreateAPIView):
model = Worker
serializer_class = WorkerSerializer
当我使用未指定角色的 POST 请求创建新工作人员时,它无法选择模型中的默认值并返回错误:
ValueError: Cannot assign None: "Worker.role" does not allow null values.
如有任何帮助,我们将不胜感激。
谢谢
注意:我使用 PrimaryKeyRelatedField
因为 Role.name
字段是由 django-dbgettext
翻译的,所以我无法使用它在 REST API 中。
编辑:角色表中 id=1 的行已存在。
最佳答案
我找到了一个解决方案:向序列化器添加字段级验证:
class WorkerSerializer(serializers.ModelSerializer):
...
def validate_role(self, attrs, source):
"Set a default role if needed."
value = attrs[source]
if value is None:
attrs[source] = Role.objects.get(id=Worker.role.field.default)
return attrs
它可以工作,但看起来很重。
关于python - 如何将 Django REST 框架与具有外键默认值的模型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19727625/