如何手动将表单字段附加到django中的manytomany模型字段?

时间:2016-02-16 18:44:45

标签: django django-forms

所以这是我在视野中的功能:

def create_recipe(request):
    if request.method == 'POST':
           form = RecipeForm(request.POST)
           if form.is_valid():
               current_user = request.user
               data = form.cleaned_data
               recipe_data=Recipe.objects.create(user=current_user, recipebase_id=data['recipebase_id'], title=data['title'], instructions=data['instructions'])
               recipe_data.save()
               return HttpResponseRedirect(reverse('create_recipe'))
           else:
               messages.error(request, "Error")
    return render(request, 'create_recipe.html', {'form': RecipeForm })

这是我的表格:

  class RecipeForm(forms.ModelForm):

        class Meta:
            model = Recipe
            fields = ('recipebase_id', 'title

', 'instructions')

这是我的模特:

class Recipe(models.Model):

    user = models.ForeignKey('auth.User')
    recipebase_id = models.ManyToManyField(Recipebase)
    title = models.CharField(max_length=500)
    instructions = models.CharField(max_length=500)
    def __str__(self):
        return self.title

更新

<form action="/create_recipe/" method="post">
{% csrf_token  %}


     <div class="form-group">
          <label for="{{ form.recipebase_id.label }}" class="form-control" >
        <select id="id_{{ form.recipebase_id.name }}" name="{{ form.recipebase_id.name }}">
    {% for value, title in form.recipebase_id.field.choices %}

            <option value="{{ value }}">{{ title }}</option>

        {% endfor %}

          </select>
    </div>

<div class="form-group">
<label for="{{ form.title.label }}">{{ form.title.label }}:</label>
<input type="{{ form.title.type }}" name="{{ form.title.name }}" max_length="500" class="form-control" id="{{ form.title.id }}">
</div>

<div class="form-group">
<label for="{{ form.instructions.label }}">{{ form.instructions.label }}:</label>
<input type="{{ form.instructions.type }}" name="{{ form.instructions.name }}" max_length="500" class="form-control" id="{{ form.instructions.id }}">
</div>


     <input type="submit" value="submit">
</form>

当我提交表单时,它会抛出recipebase_id是一个无效的参数: &#39; recipebase_id&#39;是此函数的无效关键字参数

可以理解的是,它是一个很多领域,所以它不像普通的文本字段那么合适,但我真的不明白用哪种方式来表达它。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

在视图中,您不应该保存这样的对象。你刚才这样做

  

obj = form.save()

在表单上运行save方法创建并保存该表单中的对象。

答案 1 :(得分:0)

您可以在渲染时使用 django 应用程序“django-widget-tweaks”将类添加到模板中的 django 表单字段。 在 django 模板中使用它来添加类(例如引导类)

例如下面的代码添加 form-control 类来输入 html 标签

     {% load widget_tweaks %}
     {% for field in form.visible_fields %}
      <div class="form-group">
        <label for="{{ field.id_for_label }}">{{ field.label }}</label>
       {% render_field field class="form-control" %}

      </div>
    {%endfor%}
可以在此处找到有关其用法的更多信息 https://github.com/jazzband/django-widget-tweaks