Вызываемое по умолчанию поле модели Django не работает - PullRequest
0 голосов
/ 10 мая 2018

Поле вызываемой модели Django по умолчанию не работает.Когда я устанавливаю для поля модели значение по умолчанию равное вызываемому (см. Файл миграции ниже), все модели получают одно и то же значение, даже если вызываемое возвращает разные значения при каждом вызове.

Это работало в предыдущих полях, поэтомуЯ запутался, почему Джанго потерпит неудачу на этом поле.Все работает до момента миграции, когда при проверке столбца базы данных все значения совпадают.

Файл миграции:

# -*- coding: utf-8 -*-
# Generated by Django 1.10.1 on 2018-05-10 14:53
from __future__ import unicode_literals

from django.db import migrations, models
import screen.models


class Migration(migrations.Migration):

    dependencies = [
        ('screen', '0064_employer_enable_show_question_template_tags'),
    ]

    operations = [
        migrations.AddField(
            model_name='question',
            name='key',
            field=models.TextField(default=screen.models.generate_question_key),
        ),
    ]

Модель

def generate_question_key():
    # return a random string 64 characters long
    return generate_random_hash(64)

class Question(Model):
    name = TextField()
    points = PositiveIntegerField() # how much it's worth
    time_spent = PositiveIntegerField(default = 0) # seconds
    score = PositiveIntegerField(default = 0)
    key = TextField(default = generate_question_key)

По умолчанию возвращаются разные значения:

>>> import screen
>>> screen.models.generate_question_key()
'JpZzloZkiLyvPLrDZ9764VTWkNUon1FD08mGKODa2uiqW1nV422HXVvt78MsW7aR'
>>> screen.models.generate_question_key()
'NHyTwPDA2cAAsTeIR77INLMM6Ik14EQ6vTlrTv4ZwV56nt6jGEtR8bKn8iyWDeMA'
>>> screen.models.generate_question_key()
'q2aALA7WmvtiKLiGXfNEStpKhOFcNpMDrJ8Y9sv6mwWNsUU6mdgMlgaW5yJJ1yEI'
>>> 

1 Ответ

0 голосов
/ 10 мая 2018

Похоже, что это ограничение Джанго: https://docs.djangoproject.com/en/1.11/howto/writing-migrations/#migrations-that-add-unique-fields

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...