我正在尝试使用任务功能更新django中的三个模型,并使用外键将它们链接在一起。 事件,市场和亚军
我希望能够查询视图中的数据并显示数据。
一个赛事有多个市场,每个市场都有多个参赛者。
当我尝试使用外键将三个模型链接在一起时,出现错误。
django.db.utils.ProgrammingError: relation "apimb_event" does not exist
STATEMENT: SELECT "apimb_event"."event_id","apimb_event"."event_name","apimb_event"."start_time","apimb_event"."status" FROM "apimb_event" ORDER BY "apimb_event"."event_id" DESC LIMIT 21
更新: 核对数据库并重新开始后,我也遇到类似的错误。
apimb.models.DoesnotExist: Market matching query does not exist.
psycopg2.errors.NotNullViolation: null value in column "event_id"
violates not-null constraint DetaIL: Failing row contains
(1271204194200017,null,null).
我认为我没有正确使用外键。每个模型都有一个ID作为主键。 我可以不用外键就可以很好地更新和创建此数据,但是, 如何更新模型,然后查询数据以显示如下?
Event Market Runner
event_name_1 market_name_1 runner_name_1
runner_name_2
runner_name_3
event_name_1 market_name_2 runner_name_1
runner_name_2
runner_name_3
runner_name_4
任务功能
@shared_task(bind=True)
def get_events(self):
api = get_client()
events = api.market_data.get_events(sport_ids=[9],states=MarketStates.All,per_page=200,offset=0,include_event_participants=Boolean.T,category_ids=None,price_depth=3,side=Side.All,session=None)
for event in events:
event_name = event["name"]
event_id = event['id']
start_time = event['start']
status = event["status"]
ev,created = Event.objects.update_or_create(event_id=event_id)
ev.event_name = event_name
ev.start_time = start_time
ev.status = status
ev.save()
markets = event["markets"]
for market in markets:
event_id = market['event-id']
market_id = market['id']
market_name = market['name']
status = market['status']
volume = market['volume']
ma,created = Market.objects.update_or_create(market_id=market_id)
ma.market_name = market_name
ma.status = status
ma.volume = volume
ma.save()
runners = market["runners"]
for runner in runners:
runner_name = runner['name']
runner_id = runner['id']
event_id = runner['event-id']
runner,created = Runner.objects.update_or_create(runner_id=runner_id)
runner.event_id = event_id
runner.runner_name = runner_name
runner.save()
models.py
class Event(models.Model):
event_id = models.BigIntegerField(primary_key=True)
event_name = models.CharField(max_length=200,null=True)
start_time = models.DateTimeField(null=True)
status = models.CharField(null=True,max_length=13)
class Market(models.Model):
event = models.ForeignKey(Event,on_delete=models.CASCADE)
market_id = models.BigIntegerField(primary_key=True)
market_name = models.CharField(null=True,max_length=35)
status = models.CharField(null=True,max_length=10)
volume = models.FloatField(null=True,max_length=15)
class Runner(models.Model):
market = models.ForeignKey(Market,null=True,on_delete=models.SET_NULL)
runner_id = models.BigIntegerField(primary_key=True)
event_id = models.BigIntegerField(null=True)
runner_name = models.CharField(max_length=100)