【问题标题】:Django passing variable to a formDjango将变量传递给表单
【发布时间】:2018-11-08 20:32:04
【问题描述】:

我正在尝试将主键变量直接传递到表单(外键)中,这样用户就不必选择它。这就是我所拥有的:

我有一个 HTML 按钮

<a href="{% url 'addfraction' pk=botany.botany_id %}" class="btn btn-primary" role="button">Add Fraction</a>

它通过urls.py传递植物学表的主键(botany_id)

url(r'^addfraction/(?P<pk>\d+)/$', views.addfraction, name='addfraction'),

pk 进入 def addfraction

def addfraction(request, pk):
    if request.method == "POST":
        form = FractionForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('allbotany')
    else:
        form = FractionForm()
    return render(request, 'fraction/create_fraction.html', {'form': form})

并将表单中的数据保存到数据库中。

class FractionForm(forms.ModelForm):
    class Meta:
        model = Fraction
        fields = (
        #'fraction_id',
        'botany_id',
        'proportion_analysed',
        'soil_volume',
        'sample_volume',
        'sample_weight',
        )

botany_id 是一个外键,它变成一个下拉框,这需要变灰并包含 植物学_id pk。我哪里做错了?欢迎大家指点。

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您可以从表单字段中删除botany_id,您可以直接从views.py 中的addfraction 函数将其分配给帖子实例,而无需让您的用户参与该过程。

    只需在post.save()之前添加这一行:

     botany = get_object_or_404(Botany, pk=pk)
     post.botany_id = botany
    

    希望这就是你想要做的,祝你好运!

    【讨论】:

    • 这是我最初的想法,但它返回错误:无法分配“'1'”:“Fraction.botany_id”必须是“Botany”实例。我把 post.botany_id = pk 放在 post = form.save(...) 和 post.save() 之间
    • @GaryNobles 现在试试,我编辑了一些东西。确保在views.py中也导入你的植物模型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2018-11-07
    相关资源
    最近更新 更多