Найти - Пользователи
Полная версия: Странное поведение ContentType
Начало » Django » Странное поведение ContentType
1
Silent50
Есть код:
try:
    obj = Tag.objects.get(user_id=user.id, content_type=obj_type, object_id=item_id)
except ObjectDoesNotExist:
    obj = Tag.objects.create(user_id=user.id, content_object=ct_obj)
obj.save()

Модели скопированы из оф. документации, все что сделал добавил поле user.

Смысл в том что если начать спамить значения (user_id=1, content_type=obj_type, object_id=1), то в какой-то момент, он не найдет в базе и создаст новый объект (хотя он уже есть). И в базе получить две одинаковых записи - что мне не нужно. Что не делал ошибка есть и возникает рандомно

Не знаю что винить пробовал разные исключения DoesNotExist, get_or_create - все одно, объект создается повторно.

Куда копать?


nnmware
Ну во-первых записи не одинаковые (pk разные)
Во-вторых- что имеется в виду под “спамить значения”? Конкретнее высказывайтесь, “кокаин все-таки” (с)
В третьих- потоки используются? Может быть проблема с GIL.
+ если база MySQL- сталкивался со странным поведением блокировки при выборке записей(хз что там Оракл накрутил в последних версиях), сменил на MariaDB- проблема исчезла.
Silent50
1) Под спамить понимаю, передавать один и те же значения:
u = 1
id = 1
ct = ContentType
Tag.objects.get(user_id=u, content_type=ct, object_id=id)

2) Нет потоков.

Грубо говоря запись в базе есть, но он ее не находит и создает еще одну. И это происходит рандомно, может на 3 разе, а может вообще не произойти.

От мускула не отказаться
Dr.Livsi
try:
obj = Tag.objects.get(user_id=user.id, content_type=obj_type, object_id=item_id)
except ObjectDoesNotExist:
obj = Tag.objects.create(user_id=user.id, content_type=obj_type, object_id=item_id)
obj.save()

Так тоже косяки выскакивают?
Dr.Livsi
кстати, если уж в БД записи не должны повторяться - может добавить unique_together?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB