Как создать объекты Django с полем внешнего ключа, на которое ссылаются поля, не содержащие данных - PullRequest
0 голосов
/ 03 ноября 2019

Я столкнулся с проблемой при создании объектов django. У меня есть две модели

class League(models.Model):
   league_id = models.IntegerField(primary_key=True)  
   league_name = models.CharField(max_length=20)
   league_logo = models.URLField(null = True)     
   league_flag = models.URLField(null = True)     
   standings = models.IntegerField(null=True)     
   is_current = models.IntegerField(null=True)

class Fixture(models.Model):                      
    fixture = models.IntegerField (primary_key=True)                                                    
    league_id = models.ForeignKey('League',null=True, on_delete=models.SET_NULL)                      
    event_date = models.DateTimeField(null=True)
    event_timestamp = models.DateTimeField(null=True)

Когда я пытаюсь создать объект из моей модели прибора, и в это время у меня нет данных в таблице лиги. Я получаю сообщение об ошибке:

 Traceback (most recent call last):
     File "<console>", line 1, in <module>
     File "/data/data/com.termux/files/home/storage/predictions/forecast/odds.py", line 53, in <module>
     fixt = Fixture.objects.create_or_update(fixture_id = fixture_id,league_id_id = league_id,event_date = event_date,)
    AttributeError: 'Manager' object has no attribute 'create_or_update'
    >>> import odds
    /data/data/com.termux/files/home/storage/predictions/forecast
    Traceback (most recent call last):
     File "/data/data/com.termux/files/home/storage/predictions/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 240, in _commit
     self._commit()
     File "/data/data/com.termux/files/home/storage/predictions/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 240, in _commit
    return self.connection.commit()
    File "/data/data/com.termux/files/home/storage/predictions/env/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
    raise     dj_exc_value.with_traceback(traceback) from exc_value
   File "/data/data/com.termux/files/home/storage/predictions/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 240, in _commit
   return self.connection.commit()
   django.db.utils.IntegrityError: insert or update on table "dataflow_fixture" violates foreign key constraint "dataflow_fixture_league_id_id_674984dc_fk_dataflow_"
   DETAIL:  Key (league_id_id)=(780) is not present in table "dataflow_league".

Как я понимаю, эта ошибка возникает потому, что во время создания объекта фикстуры и процесса создания поля досягаемости league_id и его ссылки на поле league_id в таблице Лиги, которая не содержит никаких данных вэтот момент. Я думал, что для решения этой проблемы я могу изменить порядок создания объектов и сначала создать объекты лиги, а затем создать объекты объектов. Но у моей модели лиги также есть поле внешнего ключа, которое ссылается на объекты, которых не существует. У django есть какой-нибудь способ обойти подобные неприятности ???

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...