Как автоматически сгенерировать значение поля со значением поля ввода в Django Model?

Я новичок в Django. Я хочу сделать API, который автоматически генерирует значение для поля при POST к этому api с помощью Django.

def gen_code(k):
    return # a value
class generate_code(models.Model):
    code = models.CharField(max_length=100, default="", unique=True)
    generated_code = gen_code(code value) #generated with the value in code field

Что-то вроде приведенного выше кода. Как я могу сделать это

Вы не можете сделать это в объявлении полей, так как в этот момент не существует "экземпляра". Вы можете переопределить метод по умолчанию save(), чтобы выполнить это:


class GeneratedCode(models.Model):
    code = models.CharField(max_length=100, default="", unique=True)
    generated_code = models.CharField(max_length=100, null=True)

    def save(self, *args, **kwargs):
        if not self.generated_code:
            self.generated_code = gen_code(self.code)
        
        super().save(*args, **kwargs)

Это не идеально, но должно помочь вам начать. Этот код предполагает, что вы всегда хотите создать generated_code, если он еще не существует, и всегда хотите генерировать его на основе поля "code" текущего экземпляра.

Также не стоит использовать значение "по умолчанию" в сочетании с unique=True. Это приведет к ошибкам ограничения Unique, а не к тому, что django пожалуется на то, что поле является обязательным, с чем он прекрасно справляется.

Спасибо @Trent, Это сработало для меня

class inviation_Master(models.Model):
invitation_key = models.CharField(max_length=6, null=True, blank=True)

def save(self, *args, **kwargs):
    if not self.invitation_key:
        self.invitation_key = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
    super().save(*args, **kwargs)
Вернуться на верх