У меня есть модель промо-акции, которая содержит коды промо-акций и иностранный ключ для модели покупки.
Вот модель:
class Promotion(models.Model):
purchase = models.ForeignKey('Purchase')
promotion_code = models.CharField(max_length=20)
def promotion_code_generate(self): #returns a string based promotion code with 7 length
from django.conf import settings
import random, string
return ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(7))
class Meta:
unique_together = (("purchase", "promotion_code"),)
Теперь я хочу, чтобы мое поле promo_code было уникальным для каждой покупки, и для этого я добавил unique_together = (("purchase", "promotion_code"),)
в мету класса. Он отлично работает при вводе новой записи через панель администратора, так как поля с промо-кодами пусты, и я должен ввести их вручную.
Однако я хочу сделать это уникальным, чтобы при совершении покупки система брала этот экземпляр модели Purcase и автоматически генерировала этот экземпляр класса Акции, связанный через поле покупки модели Акции.
Для этого мне нужны две вещи:
1 - мне нужно, чтобы мой метод promo_code_generate проверял более ранние экземпляры модели Акции, и если сгенерированный в данный момент код не существует в прошлом для сделки, возвращая его, если не регенерируя один раз, повторная попытка до несуществующего продвижения найдена кодовая строка для этой покупки.
2 - Я попытался назначить стандартное значение_произведения_для_перемещения в поле код_процесса, однако не удалось:
promotion_code = models.CharField(max_length=20,default=self.promotion_code_generate())
Как это можно решить?