Django Использование iex api через поле модели

Здравствуйте, поэтому я опубликую свой код, потому что я надеюсь, что он объясняет мою ситуацию лучше, чем я могу сделать :) Я не могу разобраться с частью views.py, потому что не знаю, как я могу использовать аргумент для iexcloud_watchlist. Так что если кто объяснит, как мне правильно подключить мой api.py iexcloud_watchlist и watchlist_one из views.py, я буду очень благодарен. Я пробовал это с

ticker = iexcloud_watchlist(query)

, но это не работает, потому что выдает ошибку

watchlist_one() missing 1 required positional argument: 'ticker'

models.py

from django.db import models
from django.contrib.auth.models import User

class Watchlist(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=20, unique=True)
    description = models.CharField(max_length=50, null=True)
    updated = models.DateTimeField(auto_now=True)
    ticker = models.CharField(max_length=10, default='')
    
    def __unicode__(self):
        return str(self)

api.py

import requests

def iexcloud_watchlist(ticker):
response = requests.get(f'https://cloud.iexapis.com/stable/stock/{ticker}/quote? 
displayPercent=true&token=mytoken')
try:
    return response.json()
except Exception as e:
    e = "Error"

views.py

def watchlist_one(request, pk, ticker):
    Watchlist.objects.get(id=pk)
    model = Watchlist.objects
    query = model.all().values_list('ticker', flat=True)
    ticker = iexcloud_watchlist(query)
    context = {
    'list_ticker':query,
    'ticker':ticker,
    }
return render(request, 'App1/watchlist_one.html', context)

Скорее всего, это связано с ошибкой в вашем urls.py. watchlist_one требует 3 аргумента, django убеждается, что запросы будут переданы функции view.

В вашем urls.py должен быть URL, который выглядит примерно так "watchlist/int:pk/str:ticker/"

Я также не уверен в коде, который вы используете. Я оставлю несколько комментариев по этому поводу ниже

def watchlist_one(request, pk, ticker):
    Watchlist.objects.get(id=pk) # You're retrieving an object here, but not actually using it
    model = Watchlist.objects # Redundant step as you could just do Watchlist.objects.all()
    query = model.all().values_list('ticker', flat=True)
    ticker = iexcloud_watchlist(query)
    context = {
    'list_ticker':query,
    'ticker':ticker,
    }
return render(request, 'App1/watchlist_one.html', context)

Я бы сделал что-то вроде этого.

def watchlist_one(request, pk):
    obj = Watchlist.objects.get(id=pk)
    query = obj.values_list('ticker', flat=True)
    ticker = iexcloud_watchlist(query)
    context = {
      'list_ticker':query,
      'ticker':ticker,
    }
    return render(request, 'App1/watchlist_one.html', context)
Вернуться на верх