如何使用外键和Django将模型链接在一起?

我正在尝试使用任务功能更新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)
qijiannian 回答:如何使用外键和Django将模型链接在一起?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3147464.html

大家都在问