从标题填充 slug 或创建随机 - Django Form

Have slug populate from title or create random - Django Form

我希望根据用户输入的标题自动生成 slug,或者如果标题为空则生成随机整数。按照我目前的方式,slug 应该从表单标题中填充,但我收到一条错误消息,指出表单没有标题字段。

所以,我需要:

  1. 更改 views.py 中的 slug 以根据输入的标题填充
  2. 如果标题为空,则创建一个随机整数生成器(我假设在 models.py 和 views.py 中?)

有人可以帮我解决这个问题吗?

提前致谢!感谢所有帮助!

forms.py:

class PhotoUploadForm(forms.ModelForm):
    title = forms.CharField(
        widget=forms.TextInput(attrs={"placeholder": "Title of photo", "size": "30"})
    )
    description = forms.CharField(
        widget=forms.Textarea(attrs={"placeholder": "Description of photo"})
    )

    class Meta:
        model = Photo
        fields = ('category', 'title', 'description', 'image')

models.py:

class Photo(models.Model):
    creator = models.ForeignKey(MyUser, null=False, blank=False)
    title = models.CharField(max_length=30, null=True, blank=True)
    description = models.TextField(max_length=120, null=True, blank=True)
    image = models.ImageField(upload_to='user/photos/', null=True, blank=True)
    slug = models.SlugField(null=False, blank=False)
    active = models.BooleanField(default=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    class Meta:
        ordering = ['-timestamp']

    def __unicode__(self):
        return "%s" %(self.creator)

views.py:

def photo_upload_view(request, username):
    u = MyUser.objects.get(username=username)
    form = PhotoUploadForm()

    if request.method == 'POST':
        form = PhotoUploadForm(request.POST or None, request.FILES)
        new_slug = Photo.objects.get(slug=form.title)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.creator = request.user
            obj.slug = slugify(new_slug)
            obj.save()
            messages.success(request, "Thank you! You have successfully posted your picture!")
            return HttpResponseRedirect('/')

        else:
            form = PhotoUploadForm()

    submit_btn = "Upload Post"

    context = {
        "submit_btn": submit_btn,
        "form": form
    }
    return render(request, "photos/photo_upload.html", context)

这一行是你的问题:

new_slug = Photo.objects.get(slug=form.title)

您正在将 new_slug 的值设置为检索到的对象,而不是字符串。那不会令人沮丧。你可能只想要这个:

new_slug = form.title

但是如果您真的想从照片中检索值,请在末尾引用该属性,因此:

new_slug = Photo.objects.get(slug=form.title).slug

关于生成随机整数:

from random import randint
randint(0,100) 

将return一个介于0和100(含)之间的随机整数。