У меня есть модель, в которой я хочу сохранить новый экземпляр (строку). У меня есть первичный ключ для ForeignKey, но у меня нет самого объекта (предположим, он откуда-то пришел). Есть ли способ сохранить его без необработанного SQL и без получения экземпляра?
Вот модель:
class UserLocale(models.Model):
user = models.ForeignKey(KingUser)
locale = models.ForeignKey(Locale)
Теперь предположим, что у меня есть первичный ключ локали ('en_US'), но у меня нет самого объекта. Что я делаю, чтобы спасти это:
def save_locale(user_instance, locale_name):
locale = Locale.objects.get(pk=locale_name)
UserLocale.objects.create(user=user_instance, locale=locale)
Я знаю, что могу сделать это за один шаг с необработанным SQL, но мне было интересно, смогу ли я сделать это в модели запросов Django.
редактирование:
Да, UserLocale - это промежуточная таблица M2M. Я знаю, что было бы лучше создать поле ManyToMany, но это устаревший код.
Вот моя попытка SQL (без тестов, я пишу вручную, так как я не в коде):
def save_raw_sql(user_instance, locale_name):
query = """
INSERT INTO
project_userlocale (user_id, locale_id)
values (%s, %s)
"""
UserLocale.objects.raw(query, [user_instance.id, locale_name])