Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set initial value in django model form

I want to set initial data in model form, how can i do that?

I've been looking for an answer but mostly the answer is using initial or instance in view.

Is there a way so we can initialize form field in model form?

views.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})

forms.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}),
    }

Thank you.

like image 406
penk Avatar asked May 10 '26 07:05

penk


1 Answers

You can override __init__ to also get your fields, and set their initial like so:

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

        self.fields['my_field'].initial = 'my_initial'
like image 115
Brian Destura Avatar answered May 11 '26 20:05

Brian Destura