Python 无法在django admin中添加slug,使用pre_save或save()管理表单会引发错误
我一直试图在django的post模型中添加一个slug字段。对于slug字段,我想使用一个独特的slug函数,我一直在尝试使用信号和覆盖save方法来运行它,但是在这两种情况下,表单在表单中更改之前在管理页面中失效。当slug为空或其不唯一时,该表单无效 我的模特Python 无法在django admin中添加slug,使用pre_save或save()管理表单会引发错误,python,django,django-models,Python,Django,Django Models,我一直试图在django的post模型中添加一个slug字段。对于slug字段,我想使用一个独特的slug函数,我一直在尝试使用信号和覆盖save方法来运行它,但是在这两种情况下,表单在表单中更改之前在管理页面中失效。当slug为空或其不唯一时,该表单无效 我的模特 from django.db import models from django.utils import timezone from django.contrib.auth.models import User from .ut
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from .utils import unique_slug_generator
class Post(models.Model):
post_type = models.CharField(max_length=100, default='npc')
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
description = models.TextField()
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
if not self.slug:
self.slug = unique_slug_generator(self)
return super().save(*args, **kwargs)
我正在尝试的信号
from django.db.models.signals import pre_save
from .utils import unique_slug_generator
from django.dispatch import receiver
from .models import Post
@receiver(pre_save, sender=Post)
def pre_save_post_receiver(sender, instance, *args, **kwargs):
print("post reciver slug")
if not instance.slug:
instance.slug = unique_slug_generator(instance)
还有我尝试运行的独特的段塞发生器
from django.utils.text import slugify
import random
import string
def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
def unique_slug_generator(instance, new_slug=None):
"""
This is for a Django project and it assumes your instance
has a model with a slug field and a title character (char) field.
"""
if new_slug is not None:
slug = new_slug
else:
slug = slugify(instance.title)
Klass = instance.__class__
qs_exists = Klass.objects.filter(slug=slug).exists()
if qs_exists:
new_slug = "{slug}-{randstr}".format(
slug=slug,
randstr=random_string_generator(size=4)
)
return unique_slug_generator(instance, new_slug=new_slug)
return slug
谢谢你抽出时间