Reputation: 69
I am trying to read in data from a list into a serializer. When the method is executed below it only appends the name of the dashboard to my widgets_value table. A little bit about widget_endpoint_post
method it first takes in a request object that looks like
request object
{'dashboard_name': 'check_out', 'widgets': [{'position': {'top': 1, 'left': 1, 'width': 1, 'height': 1}, 'name': 0, 'content': {}, 'public_private': '', 'owner': '', 'title': ''}], 'type': 'public', 'user': 'Person_1'}
The method below uses two serializers one to create a table to reference a dashboard another to save each dashboard's layout
views.py
@api_view(['POST'])
def widget_endpoint_post(request):
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
serializer=AddDashboardSerializer(data=request.data)
data={}
if serializer.is_valid():
account=serializer.save()
body['dashboard_name']=account.dashboard_name
body['user']=account.user
body['type']=account.type
print('test')
else:
data = serializer.errors
print(body['widgets'])
# print(body['widgets'])
for x in range(len(body['widgets'])):
print(body['widgets'][x]['position']['top'])
serializer2=AddWidgitSerializer(data=request.data)
data={}
if serializer2.is_valid():
account=serializer2.save()
body['dashboard_name'] = account.dashboard_name
body['type'] = account.widget_type
body['user'] = account.owner
body['widgets'][x]['name'] = account.widget_name
body['widgets'][x]['position']['top'] = account.top
body['widgets'][x]['position']['left'] = account.left
body['widgets'][x]['position']['width']=account.width
body['widgets'][x]['position']['height']=account.height
else:
data=serializer.errors
return Response('Dashboard saved')
serializers.py
class AddDashboardSerializer(serializers.ModelSerializer):
dashboard_name=serializers.CharField(),
user=serializers.CharField(),
type=serializers.CharField(),
class Meta:
model= DashboardView
fields=['dashboard_name','user','type']
class AddWidgitSerializer(serializers.ModelSerializer):
dashboard_name=serializers.CharField(),
widget_name=serializers.CharField(),
top=serializers.CharField(),
left=serializers.CharField(),
height=serializers.CharField(),
width=serializers.CharField(),
widget_type=serializers.CharField(),
owner=serializers.CharField(),
class Meta:
model=WidgetView
fields=['dashboard_name','widget_name','top','left','height','width','widget_type','owner']
Below is the WidgetView table it only validates the name of the dashboard and I don't know why.
Upvotes: 0
Views: 135
Reputation: 39
try this
class AddDashboardSerializer(serializers.ModelSerializer):
dashboard_name = serializers.CharField()
user = serializers.CharField()
type = serializers.CharField()
class Meta:
model = DashboardView
fields = '__all__'
Upvotes: 2
Reputation: 69
for x in range(len(body['widgets'])):
WidgetView.objects.bulk_create([
WidgetView(dashboard_name=body['dashboard_name'],widget_name=body['user'],top=body['widgets'][x]['position']['top'],
left=body['widgets'][x]['position']['left'],
height=body['widgets'][x]['position']['height'],
width=body['widgets'][x]['position']['width'],
widget_type=body['type'],
owner=body['user'])
])
Upvotes: 0