В моем приложении django есть модель:
class Entry(BaseModel):
event_name = models.CharField(_('Event name'), max_length=256, null=True, blank=True)
slug = models.SlugField(null=True, blank=True, max_length=512)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = self.get_slug()
super().save(*args, **kwargs)
def get_slug(self):
add = 1
slug = None
if not self.slug and self.event_name:
init_slug = slugify.slugify(self.event_name)
slug_available = Entry.objects.filter(slug=init_slug).count() == 0
if slug_available:
slug = init_slug
else:
while not slug_available:
check_slug = '{}-{}'.format(init_slug, add)
slug_available = Entry.objects.filter(slug=check_slug).count() == 0
if slug_available:
slug = check_slug
else:
add += 1
return slug
def make_slug(self):
if not self.slug:
slug = self.get_slug()
self.slug = slug
self.save()
Поле слагов по умолчанию пусто, и теперь я хочу обновить 700k + строк с пустым слагом с новым значением.
Я делал это, запрашивая базу данных: qs = Entry.objects.filter (slug__isnull = True), а затем обновлял элементы в l oop один за другим:
for entry in qs:
entry.make_slug()
, но я смотрю для более эффективного способа сделать это. Вы знаете какое-нибудь простое решение?