Добрый день.
Столкнулся с проблемой, указанной в заголовке темы.
models.py
<pre><code>
class EventManager(models.Manager):
def create_or_update(self, name, event_date, type, event_type, team1, team2, game, league):
if team1 is None or team2 is None:
return None
print(name, event_date, type, event_type, team1, team2, game, league)
event, created = super().get_or_create(event_date=event_date, event_type=event_type, league=league,
game=game, team1=team1, team2=team2, type=type, name=name)
if not created and not (event.name == name and event.event_date == event_date and event.team1 == team1
and event.team2 == team2 and event.event_type == event_type and event.type == type
and event.league == league
):
self.filter(pk=event.pk).update(name=name, slug=slugify(name), event_date=event_date, team1=team1,
team2=team2, event_type=event_type, type=type, league=league
)
return event.name, created
class Event(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
slug = models.SlugField()
post_date = models.DateTimeField(default=timezone.now)
event_date = models.DateTimeField()
types = (
('scheduled', 'Scheduled'),
('live', 'Live'),
('past', 'Past')
)
type = models.CharField(max_length=10, choices=types, default='scheduled')on_delete=models.CASCADE)
league = models.ForeignKey(League, on_delete=models.CASCADE)
event_types = (
('bo1', 'Bo1'),
('bo2', 'Bo2'),
('bo3', 'Bo3'),
('bo5', 'Bo5'),
)
event_type = models.CharField(max_length=1, choices=event_types)
team1 = models.ForeignKey(Team, on_delete=models.CASCADE, related_name='+')
team2 = models.ForeignKey(Team, on_delete=models.CASCADE, related_name='+')
team1_score = models.IntegerField(default=0)
team2_score = models.IntegerField(default=0)
team1_wins = models.PositiveIntegerField(default=0)
team2_wins = models.PositiveIntegerField(default=0)
event_data = models.CharField(max_length=1024)
url = models.URLField(blank=True)
game_types = (
('dota-2', 'Dota 2'),
('csgo', 'CS:GO'),
('pubg', 'PUBG')
)
game = models.CharField(max_length=10, choices=game_types)
objects = models.Manager()
EventManager = EventManager()
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super().save(*args, **kwargs)
</code></pre>
<b>parse.py</b>
<pre><code>
event_name, created = event_manager.create_or_update(name=row['event_name'],
event_date=utc_dt,
type='scheduled',
event_type=row['game_type'],
team1=team1,
team2=team2,
game=row['game'],
league=league)
</code></pre>
<b>Traceback</b>
<pre>
Fire Phoenix False
Team Patience False
Asia Master League False
Fire Phoenix vs Team Patience 2019-09-19 11:00:00+00:00 scheduled bo3 Fire Phoenix Team Patience dota-2 Asia Master League
2.485323429107666
Traceback (most recent call last):
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 538, in get_or_create
return self.get(**kwargs), False
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 408, in get
self.model._meta.object_name
Event.models.DoesNotExist: Event matching query does not exist.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management__init.py", line 381, in execute_from_command_line
utility.execute()
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management__init.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
self.execute(args, cmd_options)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py", line 364, in execute
output = self.handle(*args, options)
File "E:\Programming\Мое\Dota2 Bet Site\esportsbet2\main\management\commands\parse.py", line 59, in handle
league=league)
File "E:\Programming\Мое\Dota2 Bet Site\esportsbet2\Event\models.py", line 43, in create_or_update
game=game, team1=team1, team2=team2, type=type, name=name, slug=slugify(name)))
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(args, kwargs)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 541, in get_or_create
return self._create_object_from_params(kwargs, params)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 575, in _create_object_from_params
obj = self.create(params)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 422, in create
obj.save(force_insert=True, using=self.db)
File "E:\Programming\Мое\Dota2 Bet Site\esportsbet2\Event\models.py", line 107, in save
super().save(*args, kwargs)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\base.py", line 741, in save
force_update=force_update, update_fields=update_fields)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\base.py", line 779, in save_base
force_update, using, update_fields,
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\base.py", line 870, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\base.py", line 908, in _do_insert
using=using, raw=raw)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, kwargs)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 1186, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\compiler.py", line 1334, in execute_sql
for sql, params in self.as_sql():
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\compiler.py", line 1278, in as_sql
for obj in self.query.objs
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\compiler.py", line 1278, in <listcomp>
for obj in self.query.objs
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\compiler.py", line 1277, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\compiler.py", line 1228, in pre_save_val
return field.pre_save(obj, add=True)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\fields__init.py", line 769, in pre_save
return getattr(model_instance, self.attname)
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query_utils.py", line 135, in get__
instance.refresh_from_db(fields=[self.field_name])
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\base.py", line 628, in refresh_from_db
db_instance = db_instance_qs.get()
File "C:\Users\belya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 408, in get
self.model._meta.object_name
Event.models.DoesNotExist: Event matching query does not exist.
</pre>
Updated 19 Sept. 2019, 16:21 by belyaev.nikit.