![](/img/trans.png)
[英]NOT NULL constraint failed error in django despite having null set to true and blank set to true
[英]Not null constraint failed. Django Models-Postgres Same error null=True as null=False
我在更新與外鍵鏈接的這三個模型時遇到困難它們與外鍵鏈接的原因是事件可以有多個市場,市場可以有多個跑步者。
這不是 null 錯誤,我束手無策。 即使我有一個導致問題的字段並且我從我的 model 中刪除了該字段。 進行遷移,遷移並從我的任務中刪除保存我仍然得到完全相同的錯誤。 這個不是 null 論點的目的是什么? 即使我在全新型號上使用 null=True 或 null=False,我仍然會收到錯誤消息。 不是 null 約束失敗
django.db.utils.IntegrityError: NOT NULL constraint failed: testapp_ma.event_id
我不知道為什么這會失敗。
我是否需要確保所有字段都有 null 參數? 根據 django 文檔默認為 false。 對於每個 object 我的任務運行,所有字段都有數據。 所以默認 false 應該沒問題。 這可能是由於我使用任務更新模型的方式嗎?
完整的堆棧跟蹤 https://gist.github.com/Cally99/08fed46ba8039fa65d00f53e8a31b37a
class Event(models.Model):
sport_name = models.CharField(max_length=15)
event_id = models.BigIntegerField(unique=True, null=False)
event_name = models.CharField(max_length=200)
start_time = models.DateTimeField()
status = models.CharField(max_length=13)
class Market(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
market_id = models.BigIntegerField(unique=True)
market_name = models.CharField(max_length=35)
status = models.CharField(max_length=10)
volume = models.FloatField(null=True)
class Runner(models.Model):
market = models.ForeignKey(Market, null=True, default=None, on_delete=models.SET_NULL)
runner_id = models.BigIntegerField(unique=True)
event_id = models.BigIntegerField(null=True, default=0)
name = models.CharField(max_length=100)
任務.py
@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 = Ev.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 = Ma.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:
name = runner['name']
runner_id = runner['id']
event_id = runner['event-id']
runner, created = Ru.objects.update_or_create(runner_id=runner_id)
runner.event_id = event_id
runner.name = name
runner.save()
隨着線
Ma.objects.update_or_create(market_id=market_id)
您尚未為您的市場 object 設置Event
。 鑒於如何
event = models.ForeignKey(Event, on_delete=models.CASCADE)
沒有null=True
,它不會接受任何 null 值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.