У меня есть модель:
class NotificationSettings(models.Model):
android_device = models.ForeignKey(
'users.AndroidDevice',
default=None,
null=True,
blank=True,
on_delete=models.SET_NULL
)
user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
...
class Meta:
unique_together = ("user", "android_device")
Моя проблема в том, что у меня есть unique_together для полей, которые можно обнулять. Я узнал, что в PostgreSQL (и, как правило, в стандарте SQL) NULL! = NULL, поэтому я могу получить, например, два объекта NotificationSettings, которые имеют одинаковый device_id, а в обоих случаях пользователь имеет значение NULL.
Я думал, что использования NotificationSettings.objects.get_or_create()
везде, где я создаю эти объекты, будет достаточно, но я предполагаю, что есть условие гонки, когда два запроса достигают конечной точки почти в одно и то же время, и я в любом случае получаю дубликаты.
Вот почему я хотел установить это ограничение на уровне PostgreSQL и думал о том, чтобы изменить поле пользователя так, чтобы оно не обнулялось, и вместо этого иметь пользователя по умолчанию.
Но я чувствую, что создание пользователя по умолчанию может иметь некоторые последствия для безопасности.
Итак, мой вопрос: является ли это хорошей практикой (или практикой вообще) для создания такого объекта-дозорного / стандартного пользователя? Есть ли какие-либо предостережения / угрозы безопасности?