I'm trying to create an Order object via ModelForm, but nothing comes out.
Forms.py
class OrderCreateForm(forms.ModelForm):
user = forms.ModelChoiceField(queryset=get_user_model().objects.all(), widget=forms.HiddenInput())
is_payed = forms.BooleanField(required=False, widget=forms.HiddenInput())
status = forms.IntegerField(widget=forms.HiddenInput())
payed_at = forms.DateTimeField(widget=forms.HiddenInput(), required=False)
price = forms.IntegerField(widget=forms.HiddenInput(), required=False)
class Meta:
model = m.OrderStorage
fields = '__all__'
Views
class StartOrder(generic.CreateView):
template_name = 'clientpart/order_create.html'
success_url = reverse_lazy('order_list_tire')
form_class = f.OrderCreateForm
queryset = m.OrderStorage.objects.all()
def get_form(self, form_class=None):
if form_class is None:
form_class = self.get_form_class()
form = form_class(**self.get_form_kwargs())
if form.is_valid():
size = int(str(form.cleaned_data['size']))
period = int(str(form.cleaned_data['period']))
price = size*period
form.fields['price'].queryset = int(price)
return form
def get_form_kwargs(self,):
ret = super().get_form_kwargs()
print(ret)
ret['initial'] = {
'user': self.request.user.pk,
'status': OrderStatus.CREATE,
}
return ret
According to my idea, the value is taken from the field and the price is created, then it is written to the dictionary, but for some reason it is not written to the dictionary. enter image description here
How do I record an object price
It seems that you are trying to set the value of the price field in your form, but you are not actually saving the form data to create a new Order object.
I think that what you need is the form_valid method where you can customize what happens when the form is submitted successfully. In this method, you can save the form data to create a new Order object, and set the price field before saving the object.
Here's an example that may can work:
class StartOrder(generic.CreateView):
template_name = 'clientpart/order_create.html'
success_url = reverse_lazy('order_list_tire')
form_class = f.OrderCreateForm
queryset = m.OrderStorage.objects.all()
def form_valid(self, form):
size = int(str(form.cleaned_data['size']))
period = int(str(form.cleaned_data['period']))
price = size * period
form.instance.price = price
form.instance.user = self.request.user
form.instance.status = OrderStatus.CREATE
return super().form_valid(form)
[...]