首页 > 解决方案 > 以 django 模型形式设置初始值

问题描述

我想以模型形式设置初始数据,我该怎么做?

我一直在寻找答案,但大多数答案是在视图中使用初始或实例。

有没有办法让我们可以在模型表单中初始化表单字段?

视图.py

def create_order(request, *args, **kwargs):
# move this thing into model form
initial_data = {
    'user': request.user.username,
    'products': Product.objects.get(pk=kwargs['pk'])
}
form = CreateOrderForm(request.POST or None, initial=initial_data)
if form.is_valid():
    form.save()
    return redirect('homepage')
return render(request, "orders/create_order.html", {"form": form})

表格.py

class CreateOrderForm(forms.ModelForm):

# How to initialize value in this model form?

class Meta:
    model = Order
    fields = ['user', 'products', 'quantity', 'address', 'total_price']
    widgets = {
        # Make user fields disabled
        'user': forms.TextInput(attrs={'disabled': True}),
    }

谢谢你。

标签: pythondjangodjango-viewsdjango-forms

解决方案


您可以覆盖__init__以获取您的字段,并initial像这样设置它们:

class CreateOrderForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().init(*args, **kwargs)

        self.fields['my_field'].initial = 'my_initial'

推荐阅读