Разрешение ошибки Django на форме: Объект не имеет атрибута
Здравствуйте, я пытаюсь создать форму, которая при использовании будет обновлять одну модель (Command_Node), и в то же время создавать экземпляр другой модели (EC_NODE), которая имеет отношения много к одному с Command_Node.
Однако, когда я перехожу к представлению обновления и отправляю форму, я получаю следующую ошибку. Есть идеи, как я могу решить эту ошибку?
Спасибо за любую помощь, которую вы можете предложить.
AttributeError at /website/update/1
'Beacon' object has no attribute 'EC_Node_set'
Request Method: POST
Request URL: http://127.0.0.1:8000/website/update/1
Django Version: 4.0.4
Exception Type: AttributeError
Exception Value:
'Beacon' object has no attribute 'EC_Node_set'
Это при отслеживании указывает на
command_form.EC_Node_set.all() # <- not sure with all _ and Maj here
Что я могу понять. Думаю, мое намерение здесь должно быть достаточно ясным. Я хочу установить экземпляр EC_Node для хранения команды, только что введенной через форму, и я понимаю ошибку. Я просто не знаю, как ее обойти, чтобы представление/форма делали то, что я хочу.
Релевантные представления.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.cleaned_data['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})
Релевантные модели.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)
Relevant 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)
Сейчас я решил эту проблему следующим образом:
EC_Node.objects.create(Command_node=host_id, command=form.cleaned_data['current_commands'])