在视图Django中手动设置slug字段形式

时间:2017-04-25 18:24:07

标签: django forms django-models django-forms django-views

我是Django的新手,我正试图用slug预先填充我的表格中的一个字段。

我从另一个模特那里得到了slu ..我没有使用ForeignKey,因为它显示了一个包含我的对象的列表,我想以与我在URL中使用的相同的slug形式保存。

也许我没想到这是对的。我该怎么办?

谢谢!

这是我的模特:

from django.db import models

class Thing(models.Model):

    name = models.CharField(max_length=255,)
    rut = models.CharField(max_length=12, blank= True)
    cel = models.CharField(max_length=12, blank= True)

    slug = models.SlugField(unique=True)

class Control(models.Model):
    id_p = models.SlugField()
    pa = models.CharField(max_length=3,)

我的表格

from django.forms import ModelForm
from collection.models import Thing, Control, Medicamento

class ThingForm(ModelForm):
   class Meta:
       model = Thing
       fields = ('name', 'rut','cel','pet',)

class ControlForm(ModelForm):
   class Meta:
       model = Control
       exclude = ['id_p']

这就是我在视图中所做的事情

def add_control(request, slug):
    thing = Thing.objects.get(slug=slug)
    form_class = ControlForm

    form_class(initial={'id_p':thing})

    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
           form.save()
           return redirect('thing_detail', slug=thing.slug)
    else: form = form_class()

    return render(request, 'things/control.html', {
    'thing': thing,
    'form': form,
})

1 个答案:

答案 0 :(得分:1)

所以,我明白了! 在views.py中,"如果form.is_valid():" 我说这个:

prev = form.save(commit=False)
prev.id_p = thing.slug
prev.save()    

以这种方式,我在提交表单之前将数据放在排除字段中。