Как добавить несколько строк данных в один столбец существующего экземпляра модели? Django

Здравствуйте, у меня есть представление, связанное с формой и моделью. Я хотел бы сделать так, чтобы когда я обновляю одно из этих полей (current-command). Оно добавляет эти данные в другое поле (Выполненные_команды). Затем, когда я позже добавлю другую команду в эту модель через форму, которая обновит поле Current_Commands. Это просто добавит еще одну строку в колонку Executed_commands. Вместо того, чтобы удалить данные, уже имеющиеся в этом столбце, и заменить их.

models.py (соответствующий раздел)

CHOICES = [
    ('Sleep', "Sleep"),
    ('Open SSH_Tunnel', 'Open SSH_Tunnel'),
    ('Close SSH_Tunnel', 'Close SSH_Tunnel'),
    ('Open TCP_Tunnel', 'Open TCP_Tunnel'),
    ('Close TCP_Tunnel', 'Close TCP_Tunnel'),
    ('Open Dynamic', 'Open Dynamic'),
    ('Close Dynamic', 'Close Dynamic'),
    ('Task', 'Task'),
]


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),
    Executed_Commands = models.CharField('Executed_Commands', max_length=2000, null=True)
    
    def __str__(self):
        return str(self.host_id)

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
        )

views.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():
        form.save()
        return redirect('home')
    
    
    return render (request, 'update.html', {'host_id':host_id,'form':form})

Есть идеи, как мне это сделать? Поскольку я могу найти информацию о том, как обновить поле, но не о том, как просто добавить в столбец, а затем заменить строки столбцов этой модели на новые.

Спасибо

Вам просто нужно many2one на Executed_Commands (теперь это модель

).
class Executed_Command(models.Model):
    Command_node = models.ForeignKey(Command_Node, on_delete=models.DO_NOTHING)
    command = models.CharField(choices=CHOICES, max_length=50, null=True)

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)

Теперь вы можете иметь Command_Node с большим количеством Executed_Command

Итак, необходимо добавить в Command_Form save

class Command_Form(ModelForm):
    def save(self, **kwargs):
        Executed_Command.objects.create(
            command=self.cleaned_data["current_commands"],
            Command_node=self.instance
        )
        return super().save(**kwargs)
    

Когда вы сохраняете форму, перед изменением current_commands (опечатка в вашем коде, вставленном на StackOverFlow) мы создаем выполняемую команду, поэтому теперь, когда у вас есть Command_Form, вы можете использовать :

command_form = Command_Form.objects.first()
command_form.Executed_command_set.all() # <- not sure with all _ and Maj here
Вернуться на верх