【问题标题】:set slug field form manually in views Django在视图 Django 中手动设置 slug 字段形式
【发布时间】:2017-09-22 21:59:45
【问题描述】:

我是 Django 的新手,我正在尝试用 slug 预填充表单的一个字段。

我从另一个型号那里得到了蛞蝓。我没有使用 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,
})

【问题讨论】:

  • form_class(initial={'id_p':thing.slug})?您还需要在ControlForm 中从fields 中排除id_p。
  • @ozgur 不起作用。数据库中字段 id_p 为空
  • 我知道了,谢谢你的排除部分。

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


【解决方案1】:

所以,我想通了! 在views.py 中,在“ if form.is_valid():”之后 我把这个:

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

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

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 2015-11-27
    • 2023-04-07
    • 2011-08-20
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2014-04-21
    • 2010-11-26
    相关资源
    最近更新 更多