Django: Как проверять корректность поля в models.py при создании новых объектов?
Я делаю Url Shortener на django. Есть модель ссылки с двумя полями: link
и key
, первое - это начальная ссылка, которую ввел пользователь, второе - ключ или идентификатор, который будет добавляться как параметр сокращенной ссылки для переадресации. Этот ключ генерируется с помощью функции gen_key
, которая рандомно выбирает 6 символов из строки содержащей заглавные, строчные буквы английского алфавита и цифры.
Я хочу в своей модели прописать такой метод, который будет автоматически вызываться перед сохранением объекта и проверять уникально ли поле key
и если оно повторяется перегенерировать его и сохранить объект. Как мне это можно сделать?
Вот мой код models.py:
from django.db import models
from random import choice
def gen_key():
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
key = ''.join([choice(chars) for x in range(6)])
key = 'ababab'
return key
class Link(models.Model):
link = models.CharField(max_length=300)
key = models.CharField(max_length=200, default=gen_key(), editable=False, unique=True)
def save(self, *args, **kwargs):
print(args)
print(kwargs)
super().save(*args, **kwargs) # Call the "real" save() method.
def __str__(self):
return self.link
Источник: Stack Overflow на русском