У меня есть проект django, созданный с использованием пользовательских форм django admin и django.Я пытаюсь отправить запрос в API.Как получить данные из форм во вложенном формате.
Мои формы в настоящее время выглядят так:
class CampaignForm(forms.Form):
consumer = forms.CharField(max_length=200)
startDate = forms.DateTimeField(
input_formats=['%d/%m/%Y %H:%M'])
endDate = forms.DateTimeField(
input_formats=['%d/%m/%Y %H:%M'])
referreeCredits = forms.IntegerField()
referrerCredits = forms.IntegerField()
maxReferreeCredits = forms.IntegerField()
maxReferrerCredits = forms.IntegerField()
message = forms.CharField(max_length=200)
kramerTemplateId = forms.CharField(max_length=200)
paymentMode = forms.CharField(max_length=200)
eventName = forms.CharField(max_length=200)
operator = forms.CharField(max_length=200)
value = forms.IntegerField()
mOperator = forms.CharField(max_length=200)
mValue = forms.IntegerField()
mReferrerCredits = forms.IntegerField()
json, который принимает API, выглядит следующим образом:
{
"consumer": "FILING",
"startDate": 0,
"endDate": 0,
"referreeCredits": 0,
"referrerCredits": 0,
"maxReferreeCredits": 0,
"maxReferrerCredits": 0,
"message": "string",
"kramerTemplateId": "string",
"eventRules": [
{
"eventName": "string",
"operator": "EQUAL",
"value": 0
}
],
"milestoneRules": [
{
"operator": "EQUAL",
"value": 0,
"referrerCredits": 0
}
],
"paymentMode": "PAYTM"
}
Я также безуспешно пытался жестко кодировать json(Я получаю 400 ошибочных запросов),
def campaign_add(self, request):
form = CampaignForm()
if request.method == 'POST':
import ipdb; ipdb.set_trace()
form = CampaignForm(request.POST)
if form.is_valid():
dat = {
"consumer": request.POST["consumer"],
"startDate": self.datetime_to_epoch(request.POST["startDate"]),
"endDate": self.datetime_to_epoch(request.POST["endDate"]),
"referreeCredits": int(request.POST["referreeCredits"]),
"referrerCredits": int(request.POST["referrerCredits"]),
"maxReferreeCredits": int(request.POST["maxReferreeCredits"]),
"maxReferrerCredits": int(request.POST["maxReferrerCredits"]),
"message": request.POST["message"],
"kramerTemplateId": request.POST["kramerTemplateId"],
"eventRules": [
{
"eventName": request.POST["eventName"],
"operator": request.POST["operator"],
"value": int(request.POST["value"])
}
],
"milestoneRules": [
{
"operator": request.POST["mOperator"],
"value": int(request.POST["mValue"]),
"referrerCredits": int(request.POST["mReferrerCredits"])
}
],
"paymentMode": request.POST["paymentMode"]
}
# import ipdb; ipdb.set_trace()
res = requests.post("https://example.com/", data=dat)
if res.status_code == 201 or res.status_code == 200:
messages.success(request, 'Success!')
return redirect("admin:campaign-pg1")
else:
messages.error(request, 'Submission Failed.')
return TemplateResponse(request, "admin/campaign_add.html", {"form":form})
Как сделать запрос на публикацию в указанном выше формате?