Как отправить post-запрос в Django Rest Framework, где ключ содержит список json-объектов?
Я новичок в Django Rest Framework и в самом django. Я хочу отправить запрос, в котором ключ имеет список объектов. Пока что я создал модель User_parameter и передаю ее в качестве внешнего ключа. Я потерялся и не знаю, что делать дальше. Нужно ли мне переопределить create()
в User_Parameters_Serializer
serializer или что-то совершенно другое?
Я добавил код для моих models.py
, serializer.py
, представления на основе функций, где я обрабатываю запрос на пост, и желаемый контур запроса на пост.
Спасибо, что уделили мне время. Я очень ценю это.
# The post request I want to send looks like this:
{
"model_path": "some path",
"data_path": "some path for csv",
"sep": ",",
"target_column": "target_column",
"label_column": "lable_column",
"function_names": "some strings",
"user_params": [{
"standard_deviation": between[1-3],
"direction": 0 OR 1,
"feature_list": "some strings"
}]
}
#models.py
class User_Parameters(models.Model):
def validate_standard_deviation_number(value):
if value not in range(1,4):
raise ValidationError(
_('%(value)s is not in range: [1-3]'),
params={'standard deviation': value},
)
def validate_direction(value):
#### 0 - Negative
#### 1 - Positive
if value not in range(0,2):
raise ValidationError(
_('%(value)s needs to be either 0 (Negative) or 1 (Positive)'),
params={'direction': value},
)
standard_deviation = models.IntegerField(default=1, validators=[validate_standard_deviation_number])
direction = models.IntegerField(default=1, validators=[validate_direction])
feature_list = models.CharField(default='', max_length=3000)
def __str__(self):
return "std dev: %s, dir: %s, feature list: %s" % (self.standard_deviation, self.direction, self.feature_list)
class Machine_Learning_Test_Engine(models.Model):
model_path = models.CharField(default='', max_length = 3000)
data_path = models.CharField(default='', max_length = 3000)
sep = models.CharField(default='', max_length = 3000)
target_column = models.CharField(default='', max_length = 3000)
label_column = models.CharField(default='', max_length = 3000)
function_names = models.CharField(default='', max_length=3000)
user_params = models.ForeignKey(User_Parameters, on_delete=models.CASCADE)
#serializer.py
class User_Parameters_Serializer(serializers.ModelSerializer):
class Meta:
model = User_Parameters
fields = '__all__'
class MLTE_Serializers_Model(serializers.ModelSerializer):
class Meta:
model = Machine_Learning_Test_Engine
fields = '__all__'
@api_view(['POST'])
def mlte_reqeust(request):
if request.method == 'POST':
serializer = MLTE_Serializers_Model(data = request.data)
if serializer.is_valid():
serializer.save()
global mlte
mlte = MLTE(serializer.data['model_path'], serializer.data['data_path'],serializer.data['sep'], serializer.data['target_column'],serializer.data['label_column'])
functions = str(serializer.data['function_names']).split(",")
### I have to pass the ```{"user_param":[{A1}]}``` as the argument of ```generate_data()```.
mlte.generate_data(functions)
json_data_pandas = pandas.DataFrame.to_json(mlte.data.head())
return Response(json_data_pandas, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)