Как автоматически сгенерировать значение из другого объекта в той же таблице - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть таблица, в которой есть сущность имени и суммы, и я хочу, чтобы это:

это пример моей таблицы models.py:

class Test(models.Model):
 test_id = models.IntegerField(primary_key=True)
 name = models.CharField(max_length=50)
 amount = models.IntegerField()
 timestamp = models.DateTimeField()

, если он введен сумма равна 300, имя будет «привет», в противном случае, если введенная сумма будет равна 500, имя будет «мир». Пожалуйста, помогите, пытаясь выяснить это со вчерашнего дня, я действительно новичок ie на python и django.

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Либо вы можете справиться с этим в пользовательском методе сохранения модели или на уровне сериализатора ( ModelSerializer ), если вы используете rest apis. Рекомендуемый способ - обрабатывать данные такого рода в сериализаторе вашей модели. Используйте собственный метод создания / обновления в вашем сериализаторе (логика c в обоих решениях остается неизменной):

class TestSerializer(serializers.ModelSerializer):
    amount = serilaizers.IntegerField()
    name = serilaizers.CharField()

    class Meta:
        model = Test
        fields = [
            'test_id',
            'amount',
            'name',
            'timestamp',
        ]
    def create(self, validated_data):
        if validated_data['amount'] > 1200:
            validated_data['name'] = 'dry'
        elif validated_data['amount'] == 0:
            validated_data['name'] = 'wet'
        elif 900 <= validated_data['amount'] <= 1200:
            validated_data['name'] = 'light'
        elif 500 <= validated_data['amount'] < 900:
            validated_data['name'] = 'medium'
        elif 0 < validated_data['amount'] < 500:
            validated_data['name'] = 'heavy'

        return Test.objects.create(**validated_data)
0 голосов
/ 29 февраля 2020

Создайте собственный метод save (), например:

class Test(models.Model):
    test_id = models.IntegerField(primary_key=True)
    amount = models.IntegerField()
    name = models.CharField(max_length=50)
    timestamp = models.DateTimeField()
    def save(self, *args, **kwargs):
        self.name = 'hello' if self.amount == 300 else 'world'
        super(Test, self).save(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...