ユニーク= Trueのフィールドを持つモデルにFKでオブジェクトを作成していないビューでDjangoの残りのフレームワークは、私はこのような二つのモデル持って
を、I
address_serialized = AddressSerializer(data=request.data)
if address_serialized.is_valid():
address_serialized.save(client=client)
これは決してcreate
になります。コードはFalseを返すis_valid()
この機能を、触れることはありません
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
:私はこのようになります作成機能付きシリアル化されています。私が使用して新しいアドレスを作成できるようにする必要があり
とメッセージが
{}:{「名前」[「この名前の部門がすでに存在している。」]「部門」}です既存のセクターへのFK。それをどうすれば実現できますか?どんな助言も役に立ちます。
EDITは
ビューは次のようになります。
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)
無効なデータ –
あなたの意見をお寄せくださいか?また、 '' 'serializer''の' '' required = True'''を変更すると何も変わりませんか? –
また、dbにセクタエントリがないかブランクでチェックしてください。 –