Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:Slugify Post数据_Python_Django - Fatal编程技术网

Python Django:Slugify Post数据

Python Django:Slugify Post数据,python,django,Python,Django,我正在尝试保存用户输入的一些表单数据。我想对用户输入的“名称”进行slugify,但不希望slug字段显示在用户看到的模板上。我试着用下面的sell函数手动完成,但不能完全让它工作。我希望最终将slugized名称保存到下面列出的项目模型中。我确信有一种比我目前使用的销售功能更聪明/更简单的方法:P.提前感谢 class Item(models.Model): user = models.ForeignKey(User) name = models.CharField(max_l

我正在尝试保存用户输入的一些表单数据。我想对用户输入的“名称”进行slugify,但不希望slug字段显示在用户看到的模板上。我试着用下面的sell函数手动完成,但不能完全让它工作。我希望最终将slugized名称保存到下面列出的项目模型中。我确信有一种比我目前使用的销售功能更聪明/更简单的方法:P.提前感谢

class Item(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=75)
    slug = models.SlugField(max_length=50, unique=True)
    is_active = models.BooleanField(default=True)
    image =  models.CharField(max_length=50)
    price = models.DecimalField(max_digits=9, decimal_places=2)
    quantity = models.IntegerField(default=1)
    description = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    shipping_price = models.DecimalField(decimal_places=2, max_digits=6)
    categories = models.ManyToManyField(Category)


class AddItem(forms.ModelForm):
    class Meta:
        model = Item
        exclude = ('user','slug','is_active',)

def sell(request):
        if request.method == "POST":
            form = AddItem(request.POST)
            item = form.save(commit=False)
            item.user = request.user
            item.is_active = True
            item.slug = slugify(form.name) **#not sure what this line should be?** 
            item.save()
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('thanks.html')
            else:
                url = urlresolvers.reverse('register')
                return HttpResponseRedirect(url)
根据,可以将字段排除在模型形式中渲染,如下所示:

class PartialAuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title')

或者在模型中的字段实例上设置editable=False

完成此操作后,可以重写模型的保存方法,如OP中的注释所示:

#  shamelessly copied from http://stackoverflow.com/questions/837828/how-do-i-create-a-slug-in-django/837835#837835
from django.template.defaultfilters import slugify

class test(models.Model):
    q = models.CharField(max_length=30)
    s = models.SlugField()

    def save(self, *args, **kwargs):
        self.s = slugify(self.q)
        super(test, self).save(*args, **kwargs)
根据,可以将字段排除在模型形式中渲染,如下所示:

class PartialAuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title')

或者在模型中的字段实例上设置editable=False

完成此操作后,可以重写模型的保存方法,如OP中的注释所示:

#  shamelessly copied from http://stackoverflow.com/questions/837828/how-do-i-create-a-slug-in-django/837835#837835
from django.template.defaultfilters import slugify

class test(models.Model):
    q = models.CharField(max_length=30)
    s = models.SlugField()

    def save(self, *args, **kwargs):
        self.s = slugify(self.q)
        super(test, self).save(*args, **kwargs)

您可以从用户表单中排除slug。 并在预存信号中缓动

from django.dispatch import receiver
from django.db.models.signals import pre_save

@receiver(pre_save, sender=Item)
def iter_pre_save_handler(sender, instance, **kwargs):
    if not instance.pk:
        instance.slug = slugify(instance.name)

您可以从用户表单中排除slug。 并在预存信号中缓动

from django.dispatch import receiver
from django.db.models.signals import pre_save

@receiver(pre_save, sender=Item)
def iter_pre_save_handler(sender, instance, **kwargs):
    if not instance.pk:
        instance.slug = slugify(instance.name)

你可以在模型的save方法中实现这一点。嘿,谢谢你的回复,我对它的工作原理不太熟悉,我能给item类添加一个save方法吗?并在视图中调用该方法?在保存签出中也可以这样做:您可以在模型的保存方法中这样做。嘿,ahsan,谢谢您的回复,我不太熟悉这将如何工作,我是否可以向item类添加一个保存方法?并在视图中调用该方法?也可在保存签出中执行此操作: