Как автоматически сгенерировать значение поля со значением поля ввода в 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)