Как заставить пользователя в Django выбирать мастерскую, которую он добавил для записи на сервис для своего автомобиля?
я борюсь с той же проблемой уже 3 дня, я пытаюсь сделать мой законченный проект, который является своего рода онлайн сервисной книгой для автомобилей, которыми мы владеем, у меня есть модели vehicle, workshop, filter, servicerecord и я не могу добавить servicerecord к автомобилю, который я добавил, есть ли кто-нибудь, кто мог бы мне помочь? Вот немного кода, с которым у меня возникли проблемы, из forms.py и views.py:
class ServiceRecordCreateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
all_workshops = Workshop.objects.exclude(name="Other Workshop")
workshop_choices = [(workshop.id, workshop.name) for workshop in all_workshops]
workshop_choices.insert(0, (0, 'Other Workshop'))
self.fields['workshop'].widget = forms.Select(choices=workshop_choices)
self.fields['workshop'].choices = workshop_choices
all_filters = Filter.objects.all()
filter_choices = [(filter.id, filter.name) for filter in all_filters]
self.fields['filters_changed'].widget = forms.CheckboxSelectMultiple()
self.fields['filters_changed'].choices = filter_choices
def clean_workshop(self):
workshop_id = self.cleaned_data.get('workshop')
if workshop_id == 0: # Obsługa przypadku "Other Workshop"
workshop = Workshop.objects.filter(name="Other Workshop").first()
if not workshop:
raise forms.ValidationError("Other Workshop is not available.")
else:
workshop = Workshop.objects.get(id=workshop_id)
return workshop
class Meta:
model = ServiceRecord
fields = ['workshop', 'date', 'mileage_at_service', 'filters_changed']
widgets = {
'date': forms.DateInput(attrs={'type': 'date'}),
}
class ServiceRecordCreateView(LoginRequiredMixin, CreateView):
model = ServiceRecord
form_class = ServiceRecordCreateForm
template_name = 'create_service_record.html'
def get_success_url(self):
vehicle_id = self.kwargs['vehicle_id']
return reverse_lazy('service_record_list', kwargs={'vehicle_id': vehicle_id})
def form_valid(self, form):
service_record = form.save(commit=False)
service_record.vehicle_id = self.kwargs['vehicle_id']
service_record.save()
form.save_m2m()
return redirect(self.get_success_url())
Я пытаюсь справиться с ним уже 3 дня, и все, что я получил, это ошибка:
TypeError at /create_service_record/2/
Field 'id' expected a number but got <Workshop: Worksh1 (ALALALA)>.
Request Method: POST
Request URL: http://127.0.0.1:8000/create_service_record/2/
Django Version: 4.2.11
Exception Type: TypeError
Exception Value:
Field 'id' expected a number but got <Workshop: Worksh1 (ALALALA)>.
Exception Location: /home/kamil/.local/lib/python3.10/site- packages/django/db/models/fields/__init__.py, line 2055, in get_prep_value
Raised during: servicebook.views.ServiceRecordCreateView
Python Executable: /usr/bin/python3
Python Version: 3.10.12
Python Path:
['/home/kamil/workspace/car_care_log',
'/usr/lib/python310.zip',
'/usr/lib/python3.10',
'/usr/lib/python3.10/lib-dynload',
'/home/kamil/.local/lib/python3.10/site-packages',
'/usr/local/lib/python3.10/dist-packages',
'/usr/lib/python3/dist-packages']