Я хотел бы обновить конфигурацию устройства, используя форму модели. Мне удалось передать пользователя в форму модели, и я могу выбрать device_id, который принадлежит текущему пользователю. Но когда я отправляю форму, я получаю сообщение об ошибке: init () получил несколько значений для аргумента 'user'
Есть ли способ добавить дополнительное поле "your_device" в качестве первого (перед всеми другими полями) формы модели?
Я попытался удалить user = request.user из метода POST в views.py, но затем я получил другую ошибку:
Аргумент int () должен быть строкой, байтовоподобным объектом или числом, а не QueryDict
Это мои forms.py:
class ConfigForm(forms.ModelForm):
your_device = forms.ModelChoiceField(queryset=Device.objects.none())
class Meta:
model = Config
fields = [
'location',
'meas_pos',
'loudest_pos',
'spl_range',
'weighting',
'tx_int',
'offset',
'limit',
'notification']
def __init__(self, user, *args, **kwargs):
super(ConfigForm, self).__init__(*args, **kwargs)
self.fields['your_device'].queryset = Device.objects.filter(Q(customer=user) | Q(admin=user))
и мои views.py:
def config_view(request):
if request.method == 'POST':
form = ConfigForm(request.POST, user = request.user)
if form.is_valid():
instance = form.save(commit=False)
object_id = form.cleaned_data.get('your_device')
id_ = Index.object.get(id=object_id).device_id
instance.device_id = id_
index_id=Index.objects.get(device_id=id_)
instance.cfg_nbr=index_id.current_cfg+1
index_id.current_cfg=index_id.current_cfg+1
index_id.cfg_received=False
index_id.save()
instance.save()
messages.success(request, f'Configuration successfully changed!')
else:
form = ConfigForm(user=request.user)
context = {
'form' : form
}
return render(request, 'my_spl/config.html', context)