У меня есть следующая модель:
class League(models.Model):
sport = models.ForeignKey(Sport)
name = models.CharField(max_length=100, unique=True)
show = models.BooleanField(default=False)
display_name = models.CharField(max_length=100, blank=True, default="")
#display with smallest numbers first.
display_order = models.IntegerField(default=1000)
Но столбцы базы данных не имеют значений по умолчанию:
sportsite=> \d app_league
Table "public.app_league"
Column | Type | Modifiers
---------------+------------------------+---------------------------------------------------------
id | integer | not null default nextval('app_league_id_seq'::regclass)
name | character varying(100) | not null
show | boolean | not null
display_name | character varying(100) | not null
sport_id | integer | not null
display_order | integer | not null
Indexes:
"app_league_pkey" PRIMARY KEY, btree (id)
app_league_name_uniq" UNIQUE, btree (name)
app_league_sport_id" btree (sport_id)
Foreign-key constraints:
"sport_id_refs_id_27250fc5" FOREIGN KEY (sport_id) REFERENCES app_sport(id) DEFERRABLE INITIALLY DEFERRED
Это проблема, потому что я хочу использовать массовые вставки, например составив запрос, который выглядит следующим образом:
INSERT INTO app_league (sport_id, name)
(
SELECT i.sport_id, i.name
FROM (VALUES (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s, %s), (%s
, %s), (%s, %s), (%s, %s), (%s, %s)) AS i(sport_id, name)
LEFT JOIN app_league as existing
ON (existing.sport_id = i.sport_id AND existing.name = i.name)
WHERE existing.id IS NULL
)
Я хочу вставить его, только если комбинация (sport_id, league)
не существует, со значениями по умолчанию, указанными в django ... если значения по умолчанию были в базе данных SQL, то, похоже, этот запрос будет работать.
Итак: есть ли способ заставить django создавать значения по умолчанию для таблиц sql? (Я также использую юг, если это имеет значение).
Если нет .. Я полагаю, что я могу изменить свой запрос, чтобы проверять только те поля, которые имеют значение ON
, но указать значения по умолчанию в части VALUES
... в таком случае, как я могу получить значение поля по умолчанию программно, так что мой код массовой вставки не должен дублировать эти значения?