時に一度呼び出され、私は次の基本的なDjangoのモデル作成しました:デフォルト値は唯一のDjangoの移行
import string
import random
from django.db import models
def create_short_url():
size = 6
chars = string.ascii_uppercase + string.digits
url = ''.join(random.choice(chars) for _ in range(size))
print("\nSHORT_URL:%s\n" % url)
return url
class ShortURL(models.Model):
url = models.CharField(max_length=220,)
shortcode = models.CharField(max_length=15, unique=True, default=create_short_url)
def __str__(self):
return str(self.url)
まず私が唯一url
フィールドをコード化します。次に、shortcode
フィールドを追加し、デフォルトの一意の値を作成するために呼び出す関数を提供しました。 Djangoのドキュメントには、
と記載されています。呼び出し可能な場合は、新しいオブジェクトが作成されるたびに呼び出されます。移行を実行するとき
は残念ながら、私は一つだけ生成された短いURLと、次の例外を参照してください。
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, shortener
Running migrations:
Applying shortener.0002_auto_20161107_1529...
SHORT_URL:43AY7G
Traceback (most recent call last):
File "/home/user/django1.10/py3/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/home/user/django1.10/py3/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 337, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: UNIQUE constraint failed: shortener_shorturl.shortcode
移行中の各エントリに対して、その関数を呼び出すことが欠けていますか?
は、[ユニークなフィールドを追加移行](https://docs.djangoproject.com/en/1.10/howto/writing-migrations/#migrations-that-add-を参照してください。一意のフィールド)を使用してエラーを修正します。 – knbk
ありがとう、それはやっていなければならない方法のようです。とにかく私たちが1つの「自動魔法」のステップでそれをすることができないのは少し驚くべきことです。 ?!? – samb