Django: Динамическое и безопасное изменение значения формы из шаблона для цикла сохранения формы в базе данных

Итак, у меня есть база данных "stuff", которая по сути статична и не редактируется пользователями, это репозиторий вещей, которые пользователям разрешено сохранять. Однако пользователи могут сохранять копии этих вещей в отдельной базе данных "user_stuff", поскольку уникальные пользовательские вещи будут содержать данные, уникальные для каждого пользователя.

    class public_stuff(models.Model):
        name        = models.CharField(max_length=100, unique=True)
        description = models.TextField(blank=True)

        def __str__(self):
            return self.name

    class user_stuff(models.Model):
        name = models.CharField(max_length=100)
        stuff = models.ForeignKey(public_stuff, on_delete=models.DO_NOTHING)
        user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        description = models.TextField()
    
        def __str__(self):
            return self.name

На моей реальной странице я отображаю список всех публичных вещей (на данный момент у меня только две вещи в public_stuff в тестовых целях), а также список всех вещей пользователя. Для каждой записи публичного материала я бы хотел иметь кнопку, нажав на которую пользователь может "сохранить" копию этой записи в своем материале, но проблема в том, что я не уверен, как сделать это безопасно. Основная проблема заключается в том, что в идеале я бы хотел отображать каждую запись через длинный цикл, так как список будет динамическим как по размеру, так и по составу. В результате я пытаюсь найти безопасный способ генерировать начальные значения формы вне шаблона. Вот что у меня есть на данный момент. Он еще не включает никакого способа сохранения материала в базе данных, и в основном ограничивается только формой.

views.py:

def public_stuff_detail_view(request):
    form = SaveToUserStuffForm(request.POST or None)
    if form.is_valid():
        form.save()

    public_obj = public_stuff.objects.all() # temporary, unscalable
    user_obj = user_stuff.objects.filter(user=request.user)
    # user_obj = settings.AUTH_USER_MODEL.user_stuff_set.all()
    context = {
        'stuff': public_obj,
        'user_stuff': user_obj,
        'form': form
    }
    return render(request, "mystuff/mystuff_detail.html", context)

forms.py:

class SaveToUserStuffForm(forms.Form):
    stuff_to_save = forms.CharField(label='stuff_to_save', max_length=100, )

mystuff_detail.html

{% extends 'base.html' %}

{% block content %}

{% for obj in stuff %}
    <h1> {{ obj.name }} </h1>
    <p> {{ obj.description }} </p> 
    <form method='POST'> 
        {% csrf_token %}
        <button type='submit' name='SaveToUserStuffForm' value='{{ obj.name }}'> Save to My Stuff </button>
    </form>
{% endfor %}

{% endblock %}

Я довольно новичок в веб-разработке, но я знаю достаточно, чтобы понять, что нечто подобное относительно небезопасно, а также является плохим пользовательским опытом, потому что при обновлении формы всегда будет всплывать окно подтверждения повторной отправки. Однако я также знаю, что не должен использовать GET-формы для вещей, которые сохраняются в базах данных. Как лучше всего подойти к этому вопросу?

Вернуться на верх