私が持っているTest
各テストが一意ランダムに生成された文字列によって識別することができたモデルを:
from django.utils.crypto import get_random_string
class Test(models.Model):
code_length = 7
code = models.CharField(max_length=code_length, editable=False, default=generate_id(code_length))
name = models.CharField(max_length=100, default=None)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return "Code: {} | Username: {} | Test: {}".format(self.code, self.user.username, self.name)
def generate_id(length):
return get_random_string(length)
Tbh、以前はうまく機能していました。DjangoをDjango1.xからDjango3.xに更新した後、「バグアウト」し始めました。またTest
、django-adminでモデルのすべてのレコードをクリアしました(テスト用に新しくクリーンなデータベースが必要です) 。今、私が新しいものを作成しようとするときはいつでもTest
、それcode
はTests
私が作成する他のすべての新しいものと文字通り同じです:
私が行った2つの変更以外は何もしていないと思います。何か案は?どうもありがとう!
関数を呼び出さないでください。そうすると、デフォルトで関数呼び出しの結果が取得されます。
したがって、関数を作成します。
from django.utils.crypto import get_random_string
CODE_LENGTH = 7
def generate_id_length():
return get_random_string(CODE_LENGTH)
class Test(models.Model):
code = models.CharField(
max_length=CODE_LENGTH,
editable=False,
# no parenthesis ↓
default=generate_id_length
)
クラスのCODE_LENGTH
外に移動したくない場合はTest
、次を使用できます。
from django.utils.crypto import get_random_string
def generate_id_length():
return get_random_string(Test.code_length)
class Test(models.Model):
code_length = 7
code = models.CharField(
max_length=CODE_LENGTH,
editable=False,
# no parenthesis ↓
default=generate_id_length
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加