【发布时间】:2017-07-14 17:51:09
【问题描述】:
我在 Django 中有一个名为 ExampleModel 的模型,并且希望每个模型对象都能被唯一标识。不过,我不希望用户在 URL 中看到对象的 ID;因此,出于这个原因,我希望对象slug 是一个唯一的、随机生成的具有 8 位数字的整数,它将进入视图 URL。这与我见过的其他问题不同,因为这意味着不会生成基于模型对象名称//内容本身的 slug 字符串。
模型.py:
class ExampleModel(models.Model):
user = models.ForeignKey(UserModel, related_name='examplemodel', on_delete=models.CASCADE, null=True)
title = models.CharField(max_length=50, verbose_name='Title')
slug = models.SlugField(unique=True, blank=True, null=True)
当前 slug 的值为 null,因此我不必为所有当前 ExampleModel 对象设置默认 slug。
这很模糊可以理解,但是我找不到任何可能适合我的确切情况的指南/教程。
感谢您提供的任何帮助/指导
编辑 这是我的views.py:
def model_create(request):
user=request.user.id
if request.user.is_authenticated:
try:
example = request.user.examplemodel
except ExampleProfile.DoesNotExist:
example = ExampleProfile(user)
if request.method == 'POST':
form = NewForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('/dashboard/')
else:
return render(request, 'create.html', {'form': form})
else:
form = NewForm()
return render(request, 'create.html', {'form': form})
else:
return redirect('/users/login/?next=')
编辑2 Models.py(保存方法):
def save(self, *args, **kwargs):
if self.user is None: # Set default reference
self.user = UserModel.objects.get(id=1)
super(ExampleModel, self).save(*args, **kwargs)
【问题讨论】:
-
我会使用散列函数为标题生成散列并将其用作 slug。