Как динамически генерировать и форматировать значения полей (первичный ключ и другие типы)? - PullRequest
0 голосов
/ 05 марта 2020

Моя модель определяется следующим образом:

class Example(models.Model):
    ex_id = models.CharField(max_length=30, primary_key=True)
    name = models.CharField()
    sess_id = models.CharField(max_length=20, default=0)
    creation_date = models.DateTimeField(auto_now=False, auto_now_add=True)

    def __str__(self):
        return str(self.name)

Я пытаюсь динамически назначать id s с использованием приведенного ниже сериализатора. Значения должны быть сгенерированы на основе метки времени, взятой из модели:

class ExampleSerializer(serializers.ModelSerializer):
    ex_id = serializers.SerializerMethodField()
    name = serializers.CharField(min_length=6)
    sess_id = serializers.SerializerMethodField()

    def get_ex_id(self, obj):
        return '{:x}'.format(int(obj.creation_date.strftime("%Y%m%d%H%M%S%f")))

    def get_sess_id(self, obj):
        return 'sess_' + str(obj.creation_date.strftime("%d%H%M%S%f"))

    class Meta:
        model = Example
        fields = '__all__'

Все заканчивается вставкой одной записи в базу данных; в случае следующих попыток UNIQUE constraints failed выдается ошибка. В представлении браузера одна добавленная запись отображает id s, как определено в сериализаторе, но когда я просматриваю базу данных, для них появляются пустые / нулевые значения (0 в случае sess_id, поскольку это значение по умолчанию; пустое значение для ex_id).

Как / где настроить приложение для вставки форматированных значений в качестве значений полей?

...