如何在Django中自定义slug字段?

x0x*_*x0x 4 python django django-models django-admin

我已经检查了这个,但我需要在两个字段中连接内容好,这是问题所在.

我有两个型号,brandproduct这看起来是这样的:

品牌模型

class Brand(models.Model):
    name = models.CharField(max_length=29)
    website = models.URLField()

    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

产品型号

class Product(models.Model):
    brand = models.ForeignKey(Brand)
    name = models.CharField(max_length=140)
    slug = models.SlugField()

    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

管理方法

from .models import Product

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    prepopulated_fields = {'slug': ('name',)}
Run Code Online (Sandbox Code Playgroud)

模型上的示例输入:

**Brand**
Name: Example
Website: http://www.example.com

**Product**
Brand: Example (Selection)
Name: Product
Slug: product(prepopulated)
Run Code Online (Sandbox Code Playgroud)

我希望slu to example-productproduct.如何将品牌和名称连接成slug.

感谢您的任何帮助.

moo*_*uck 11

将品牌添加到prepopulated_fields字典只返回id而不是str/unicode值.

class ProductAdmin(admin.ModelAdmin):
    prepopulated_fields = {'slug': ('brand', 'name',)}
Run Code Online (Sandbox Code Playgroud)

一种方法是添加save_model方法ModelAdmin

from django.utils.text import slugify

class ProductAdmin(admin.ModelAdmin):    
    def save_model(self, request, obj, form, change):
        # don't overwrite manually set slug
        if form.cleaned_data['slug'] == "":
            obj.slug = slugify(form.cleaned_data['brand']) + "-" + slugify(form.cleaned_data['name'])
        obj.save()
Run Code Online (Sandbox Code Playgroud)