Как запустить функцию сразу после размещения модели DRF
У меня есть api, который имеет две модели Company (которая требует название компании) и Info (которую я хочу заполнить автоматически на основе названия компании)
Итак, что я там делаю: запрашиваю название компании по адресу "localhost:8000/company/", затем я хочу получить это название, добавить его в ссылку, затем получить информацию с finance.yahoo.com с помощью get request как csv, прогнать ее и заполнить мою модель Info информацией. Проблема в том, что когда я вызываю Company.objects.last(), то получаю информацию о предыдущей компании
Например: Я размещаю ZUO, это не дает мне ничего, затем я размещаю PD и получаю информацию о ZUO
Вот мой models.py
class Company(models.Model):
company = models.CharField(max_length=10)
class Info(models.Model):
Date = models.CharField(max_length=64)
Open = models.CharField(max_length=64)
High = models.CharField(max_length=64)
Low = models.CharField(max_length=64)
Close = models.CharField(max_length=64)
AdjClose = models.CharField(max_length=64)
Volume = models.CharField(max_length=64)
Вот мой view.py
def get_download_url():
comp = Company.objects.last()
downloadUrl = ('https://query1.finance.yahoo.com/v7/finance/download/' + comp.company.upper() +
'?period1=0&period2=5000000000&interval=1d&events=history&includeAdjustedClose=true')
return downloadUrl
def get_information():
downloadUrl = get_download_url()
headers = {'User-Agent': 'user-agent'}
response = requests.get(downloadUrl, headers=headers)
info = [string.split(',') for string in response.text.split('\n')[1::]]
return info
class CompanyViewSet(viewsets.ModelViewSet):
serializer_class = CompanySerializer
queryset = Company.objects.none()
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
Info.objects.all().delete()
info = get_information()
for row in info:
comp_info = Info()
comp_info.Date = row[0]
comp_info.Open = row[1]
comp_info.High = row[2]
comp_info.Low = row[3]
comp_info.Close = row[4]
comp_info.AdjClose = row[5]
comp_info.Volume = row[6]
comp_info.save()
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
class InfoViewSet(viewsets.ModelViewSet):
serializer_class = InfoSerializer
queryset = Info.objects.all()
Вот мой serializers.py
class InfoSerializer(serializers.ModelSerializer):
class Meta:
model = Info
fields = ('Date', 'Open', 'High', 'Low', 'Close', 'AdjClose', 'Volume')
class CompanySerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = '__all__'
Здесь urls.py
router = DefaultRouter()
router.register('company', views.CompanyViewSet)
router.register('Info', views.InfoViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router.urls)),
]