如何使用 Django 模型自动生成 slug

use*_*069 1 python forms django django-models

我遇到了表单中的 slug 问题。我从模型创建了表单。

这是models.py

class hire_article(models.Model):
hiring = models.CharField(max_length=50)
slug = models.SlugField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

这是表格

from django import forms
from django.forms import ModelForm, Textarea
from django.utils.translation import ugettext_lazy as _
import datetime
from .models import hire_article
from django.template.defaultfilters import slugify
from django.db import models
from django.contrib import admin

class postform(ModelForm):

    # class hire_articleAdmin(admin.ModelAdmin):
    #     prepopulated_fields = {"slug": ("hiring",)}
    class Meta:
        # more_infomation = MyFormField(max_length=200, required=False,
        #                    help_text="Use puns liberally")
        model = hire_article
        # exclude = ['slug']
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

这是admin.py

 from django.contrib import admin
    from .models import category, hire_article, localwork, salary,         mode_work, exp_year, degree, sex, language

class hire_articleAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("hiring",)}
    list_display = ('id', 'hiring', 'publication_date', 'namecompany', )
    admin.site.register(hire_article, hire_articleAdmin)
Run Code Online (Sandbox Code Playgroud)

它仅适用于 admin 。我希望它也能以表格形式工作。

Chi*_*mar 6

在 models.py 中进行以下更改,并在 forms.py 前面的注释中建议更改

from django.template.defaultfilters import slugify

class hire_article(models.Model):
    hiring = models.CharField(max_length=50)
    slug = models.SlugField(max_length=200)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.hiring)
        super(hire_article, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

ps:也不建议您的模型命名约定。查看 PEP8 https://www.python.org/dev/peps/pep-0008/#class-names