我有两个模型是这样的:Django的REST框架没有创造与FK对象具有独特=真领域的典范
class Sector(models.Model):
name = models.CharField(max_length=100, db_index=True, unique=True) # HERE IF I REMOVE unique=True, it works correctly
class Address(models.Model):
...
sector = models.ForeignKey(Sector, null=True, blank=True)
并为地址机型串行:
在视图中,我有这个:
address_serialized = AddressSerializer(data=request.data)
if address_serialized.is_valid():
address_serialized.save(client=client)
它永远不会去create
函数。我有一个序列化与创建功能,看起来像这样:
class AddressSerializer(serializers.ModelSerializer):
city_gps = CitySerializer(required=False)
sector = SectorSerializer(required=False)
class Meta:
model = Address
fields = (..., "sector")
def create(self, validated_data):
...
sector_dict = validated_data.get("sector", None)
sector = None
if sector_dict and "name" in sector_dict and city_gps:
if Sector.objects.filter(name=sector_dict["name"], city=city_gps).exists():
sector = Sector.objects.get(name=sector_dict["name"], city=city_gps)
# pdb.set_trace()
if "sector" in validated_data:
validated_data.pop("sector")
if "city_gps" in validated_data:
validated_data.pop("city_gps")
address = Address.objects.create(sector=sector, city_gps=city_gps, **validated_data)
return address
的代码永远不会触及这个功能,is_valid()
返回FALSE。该消息是
{“板块”:{“名”:“这个名字部门已存在”]}}
我需要能够创建一个新的地址与FK到现有的部门。我怎样才能做到这一点?任何建议都会有帮助。
编辑
的看法是这样的:
class ClientProfileAddressCreateView(APIView):
# throttle_scope = '1persecond'
renderer_classes = (JSONRenderer,)
permission_classes = (IsAuthenticated,)
def post(self, request):
try:
client = Client.objects.get(user=request.user)
except ObjectDoesNotExist:
return Response({"error": "A client profile for the logged user does not exit"},
status=status.HTTP_404_NOT_FOUND)
address_serialized = AddressSerializer(data=request.data)
print("address_serialized.is_valid: %s" % address_serialized.is_valid()) # Returns False when unique=True in models
if address_serialized.is_valid():
# print("address_serialized: %s" % address_serialized.data)
address_serialized.save(client=client)
else:
return Response(data=address_serialized.errors, status=status.HTTP_400_BAD_REQUEST)
return Response(data=address_serialized.data, status=status.HTTP_201_CREATED)
您可能想尝试'is_valid(raise_exception = True)'来诊断... http://www.django-rest-framework.org/api-guide/serializers/#raising-an-exception -on-invalid-data –
您能否向我们提供您的意见?在'''serializer'''中更改'''required' = True''也会改变什么? –
另外,你可以请检查你的数据库的无/空白的扇区条目吗? –