I have a table on sqlserver
ext_id is number,
dealer_code is string,
dealer_name is string
and I need to POST this json
{
"ext_id": 1,
"dealer": {
"dealer_code" : "D1"
"dealer_name": "Dealer1",
}
}
models.py
class reqid(models.Model):
ext_id = models.IntegerField(primary_key=True)
dealer_code = models.CharField(max_length=10, db_column="dealer_code")
dealer_name = models.CharField(max_length=30, db_column="dealer_name")
class Meta:
db_table = 'table_test'
def __str__(self):
return self.ext_id
serializer.py
class ReqSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = reqid
fields = ['ext_id', 'dealer_code','dealer_name']
views.py
class testView(viewsets.ModelViewSet):
queryset = reqid.objects.all()
serializer_class = ReqSerializer
def post(self, request, format=None):
reqid = request.data.get("reqid")
dealer_code = request.data['dealer']['dealer_code']
dealer_name = request.data['dealer']['dealer_name']
data = {'reqid': reqid, 'dealer_code': dealer_code, 'dealer_name': dealer_name}
serializer = ReqSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
when I try post json i get
HTTP 400 Bad Request
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"detail": "JSON parse error - Expecting ',' delimiter: line 5 column 3 (char 60)"
}
if I post simple json like :
{
"ext_id": 1,
"dealer_code": "D1",
"dealer_name": "Dealer1"
}
everything works. What and where should I change to load nested json.
I am a beginner so please be specific :)
UPDATE
Thx @Vishal Singh
Right now I must add more nest "asset"
....
"dealer":{
"dealer_code":"D1",
"dealer_name":"Dealer1",
},
"asset":{
"sector":{
"code":"SEC1",
"name":"Sector1"
}
}
...
how can I save sector name (I added column to database)?
When I add to views.py
sector_name = request.data['asset']['sector']['name']
and in serialize.py
class SectorField(serializers.Field):
def to_representation(self, value):
ret = {
"sector_name": value.sector_name
}
return ret
def to_internal_value(self, data):
ret = {
"sector_name": data["name"],
}
return ret
I get
HTTP 400 Bad Request
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"sector": [
"This field is required."
]
}