I have been working on this issue. Here is what I have so far.
My Model and pre_save
information--------------------------------------------------------------------------------------------:
class walmart_query_history(models.Model):
storeNumber = models.CharField(max_length=10)
receiptDate = models.DateField(auto_now=False, auto_now_add=False)
cardType = models.ForeignKey(walmart_query_history_card_type,
on_delete=models.CASCADE)
purchaseAmount = models.DecimalField(max_digits=13, decimal_places=2)
lastFour = models.CharField(max_length=4)
class Meta:
unique_together = (('receiptDate', 'purchaseAmount'),)
def validate_response_ask_walmart(*args, instance, **kwargs):
pewee = instance.receiptDate
pewee = pewee.strftime('%m-%d-%Y')
data = call_command('validate_response_query_walmart',
instance.storeNumber, str(pewee), instance.cardType,
str(instance.purchaseAmount), instance.lastFour)
valid_ser = ValidateFormSerializer(data=data)
if valid_ser.is_valid():
post_data = valid_ser.validated_data
else:
print(valid_ser.errors)
pre_save.connect(validate_response_ask_walmart,
sender=walmart_query_history)
Contents of my validate_response_ask_walmart
file------------------------------------------------------------------------------------------------:
class Command(BaseCommand):
help = 'Reads Receipts'
def add_arguments(self, parser):
parser.add_argument('storeId', type=str)
parser.add_argument('purchaseDate', type=str)
parser.add_argument('cardType', type=str)
parser.add_argument('total', type=str)
parser.add_argument('lastFourDigits', type=str)
def handle(self, *args, **options):
url = "https://www.walmart.com/chcwebapp/api/receipts"
data = {
"storeId": options['storeId'],
"purchaseDate": options['purchaseDate'],
"cardType": options['cardType'],
"total": options['total'],
"lastFourDigits": options['lastFourDigits']
}
storeId = data['storeId']
headers = {
'sec-ch-ua': '"Chromium";v="98", " Not A;Brand";v="99", "Google
Chrome";v="98"',
'accept': 'application/json',
'Referer': 'https://www.walmart.com/receipt-lookup',
'content-type': 'application/json',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36',
'sec-ch-ua-platform': '"Mac OS X"'
}
response = requests.post(url, json=data, headers=headers)
# Good documentation about requests response codes.
# https://www.w3schools.com/python/ref_requests_response.asp
#print("Status Code", response.status_code)
#print(response.text)
#print("JSON Response ", response.json())
base_JSON = response.json()
#tester = base_JSON
#return json.dumps(base_JSON, indent=4)
self.stdout.write(type(base_JSON))
My serializer
file-----------------------------------------------------------------------------------------------------------------------------------------------
from rest_framework import serializers
class ValidateFormSerializer(serializers.Serializer):
tcNumber = serializers.CharField(max_length=255,
source='receipts[0]tcNumber')
----------------------------------------------------------------------------------------
I keep getting the error code of:
AttributeError: type object 'dict' has no attribute 'endswith'
What am I missing?
On Friday, September 2, 2022 at 4:39:53 AM UTC-4 [email protected] wrote:
> Ok, I have a CreateView. The process I have now is:
> blank form is created by CreateView
> After I submit the data to the form, I have a post_save that calls a
> function that queries the API based on the values entered in the form.
>
> When and how do I call the serializer during this process?
>
> On Friday, September 2, 2022 at 3:15:00 AM UTC-4 [email protected] wrote:
>
>> Hello ,
>>
>> You can design a serializer for each api endpoint and use it in your view
>> to validate your data like validating forms data :
>> Pseducode :
>> res = requests.post(url+some_endpoint, data)
>> endpoint_serializer.validate(res.data)
>> if serializer.is_valid():
>> #do your stuff
>> else :
>> #do something
>>
>> Best Regards
>>
>> Ammar Mohammed
>>
>> On Fri, 2 Sep 2022, 01:41 [email protected], <[email protected]> wrote:
>>
>>> Hello all,
>>>
>>> I am sending an GET request to an external API and I would like to
>>> validate the response before I save it to my model. How do I do this?
>>>
>>> Thank you.
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/django-users/0b724dc1-cb08-4168-8cc0-a5eac8a7c011n%40googlegroups.com
>>>
>>> <https://groups.google.com/d/msgid/django-users/0b724dc1-cb08-4168-8cc0-a5eac8a7c011n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/328f335c-dded-412f-a15f-faea325c1ee5n%40googlegroups.com.