Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
Django 如何更改窗体的HIDDINPUT值_Django_Python 3.x - Fatal编程技术网

Django 如何更改窗体的HIDDINPUT值

Django 如何更改窗体的HIDDINPUT值,django,python-3.x,Django,Python 3.x,我试图从用户提供的对象标题创建url。我想我可以在表单的clean\uurl方法中实现这一点,但它似乎不起作用 def clean_url(self): url = re.sub(r'\W+', '', str(self.cleaned_data['title'])) return url 如何在保存前向表单中添加form.url数据 型号: class Quiz(models.Model): title = models.CharField(

我试图从用户提供的对象标题创建url。我想我可以在表单的
clean\uurl
方法中实现这一点,但它似乎不起作用

    def clean_url(self):
        url = re.sub(r'\W+', '', str(self.cleaned_data['title']))
        return url
如何在保存前向表单中添加
form.url
数据

型号:

class Quiz(models.Model):
    title = models.CharField(
        verbose_name=_("Title"),
        max_length=60,
        unique=True,
        blank=False)
    receiver = models.ManyToManyField(
        EmployeeType,
        blank=True,
        verbose_name='Employee Type',
        related_name='quiz_receiver')
    description = models.TextField(
        verbose_name=_("Description"),
        blank=True,
        help_text=_("A description of the quiz"))
    url = models.SlugField(
        max_length=60,
        blank=False,
        unique=True,
        help_text=_("e.g. 'blackjackshuffling'"),
        verbose_name=_("User friendly URL"))

SlugField
通常不是在
ModelForm
中指定的,而是由模型构造的。可以利用以下方法:

class Quiz(models.Model):
    # …
    url = models.SlugField(
        max_length=60,
        blank=False,
        editable=True,
        unique=True,
        help_text=_("e.g. 'blackjackshuffling'"),
        verbose_name=_('User friendly URL')
    )

    def save(self, *args, **kwargs):
        if self.pk is None:
            base_url = url = slugify(self.title)
            i = 0
            while self._meta.model.objects.filter(url=url).exists():
                url = f'{base_url}{i}'
                i += 1
            self.url = url
        super().save(*args, **kwargs)
然后,您可以在模型中指定应从哪个字段填充,并让
AutoSlugField
处理其余逻辑:

from autoslug import AutoSlugField

class Quiz(models.Model):
    # …
    url = AutoSlugField(
        populate_from='title',
        unique=True
    )
从autoslug导入AutoSlugField
课堂测验(models.Model):
# …
url=自动lugfield(
从class='title'填充_,
唯一=真

)
您能分享相关型号吗?通常,这是通过
slagify
在模型层完成的。编辑文章。我应该覆盖模型中的save方法吗?出于某种原因,我想我应该创建一个更靠近视图的区域。哦,非常好!我将使用它并覆盖模型保存方法。
while
循环是否只是确保不存在两个相同的URL?@DavidAlford:没错,它因此会检查是否已经存在具有给定slug的对象。我对这段代码有疑问。我注意到您在代码之后调用了
super().save()
,但是许多方法在之前调用它-有什么区别/用途?@DavidAlford:在将对象保存到数据库之前,您首先设置了slug。如果以后再做,则需要再次保存,以更新数据库端的记录。
from autoslug import AutoSlugField

class Quiz(models.Model):
    # …
    url = AutoSlugField(
        populate_from='title',
        unique=True
    )