Доступ к атрибутам/элементам формы в Django
Здравствуйте, у меня есть форма, и я пытаюсь сделать так, чтобы когда форма проверялась. Но перед сохранением. Она создаст новый экземпляр EC_Node и сохранит команду, заданную в Command_Form, не только в Command_Node, но и в EC_Nodes. Которые должны иметь отношения многие-к-одному с узлами Command_Node и которые должны записывать все команды, отправленные на узел command_node. Но это будет работать только если при вводе команды для командного_узла я также фиксирую ее в EC_узле. Что я не знаю, как именно сделать, хотя у меня есть некоторые идеи.
Итак, любой совет будет очень признателен. Соответствующий код следует.
Релевантные представления.py
def update(request, host_id):
host_id = Command_Node.objects.get(pk=host_id)
form = Command_Form(request.POST or None, instance=host_id)
if form.is_valid():
# Original suggestion was command_form = Command_Form.objects.first()
command_form = form['host_id']
command_form.EC_Node_set.all() # <- not sure with all _ and Maj here
form.save()
return redirect('home')
return render (request, 'update.html', {'host_id':host_id,'form':form})
forms.py
class Command_Form(ModelForm):
class Meta:
model = Command_Node
fields = ('host_id','current_commands')
host_id = forms.ModelChoiceField(
required=True,
queryset=Beacon.objects.all(),
widget=forms.SelectMultiple(
attrs={
'class': 'form-control'
},
)
)
current_comamnds = forms.ChoiceField(
required=True,
choices=CHOICES
)
def save(self, **kwargs):
EC_Node.objects.create(
command=self.cleaned_data["current_commands"],
Command_node=self.instance
)
return super().save(**kwargs)
models.py
class Command_Node(models.Model):
host_id = models.ForeignKey(Beacon, on_delete=models.CASCADE)
current_commands = models.CharField(choices=CHOICES, max_length=50, null=True)
def __str__(self):
return str(self.host_id)
class EC_Node(models.Model):
Command_node = models.ForeignKey(Command_Node, on_delete=models.DO_NOTHING)
command = models.CharField(choices=CHOICES, max_length=50, null=True)
def __str__(self):
return str(self.Command_node)
Когда я пытаюсь обновить вещи через update-view, я получаю следующую ошибку:
'BoundField' object has no attribute 'EC_Node_set'
Вот мой вопрос здесь. Спасибо.
Данные, подтвержденные формами, доступны в атрибуте Form.cleaned_data
. См. документацию .
Итак, вам нужно получить доступ к данным пользователя, используя этот словарь:
def update(request, host_id):
host_id = Command_Node.objects.get(pk=host_id)
form = Command_Form(request.POST or None, instance=host_id)
if form.is_valid():
# Original suggestion was command_form = Command_Form.objects.first()
command_form = form.cleaned_data['host_id']