Мне бы хотелось иметь автозаполнение того же поля для создания и редактирования модели, поэтому я пытаюсь использовать одну и ту же форму. Проблема в том, что при редактировании объекта не отображается выбранное значение, я получаю пустое значение. Как я могу установить начальное значение для него?
соответствующий код вида:
if request.method == 'POST':
form = PuppetClassForm(request.POST, instance=class_instance)
if form.is_valid():
class_instance.scope = sub_scope
class_instance.module = None
class_instance.save()
return redirect('show.subscope', user_slug=owner.slug, platform_slug=platform.slug, scope_slug=parent_scope.slug, sub_scope_slug=sub_scope.slug)
else:
form = PuppetClassForm(request.GET, initial={ 'name': class_instance.id, 'description': class_instance.description })
if class_slug:
return render(request, 'classes/edit.html', {'form': form, 'class_instance': class_instance})
else:
return render(request, 'classes/edit.html', {'form': form })
Модель:
class PuppetClass(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=256, blank=False)
description = models.CharField(max_length=256, default='')
Форма:
class PuppetClassForm(forms.ModelForm):
filters = ~Q(properties=None)
name = forms.ModelChoiceField(
queryset=PuppetClass.objects.filter(scope=None).filter(filters).order_by("name"),
widget=autocomplete.ModelSelect2(url='puppetclass-autocomplete'),
to_field_name="name"
)
description = forms.CharField(required=False)
def __init__(self, data, **kwargs):
initial = kwargs.get('initial', {})
data = {**initial, **data}
super().__init__(data, **kwargs)
class Meta:
model = PuppetClass
fields = (['name', 'description'])