Добавить или отредактировать, если уже существует

Я работаю над веб-приложением, в котором есть несколько форм, позволяющих пользователю отправлять данные в базу данных.

Данные связаны с проектом, и на странице проекта у меня есть выпадающий список, который позволяет выбрать, какую информацию нужно добавить в проект.

На данный момент у меня есть два представления, связанные с двумя выпадающими списками. Один для добавления новых данных, другой для обновления, но в идеале я бы хотел, чтобы кнопка либо переводила вас на страницу обновления, либо добавляла новую страницу в зависимости от того, какие данные уже добавлены в базу данных.

Так есть ли способ иметь одну кнопку, которая автоматически переводит вас на правильный вид?

Я представляю, что мне понадобится какая-то логика внутри представления для обработки этого. Но я не уверен, что это будет?

Views.py

@login_required
def AddFundamentals(request,project_id):
    project = get_object_or_404(Project, pk=project_id)
    if request.method == 'POST':
        form = AddFundamentalsForm(request.POST)
        if form.is_valid():
            form.instance.project = project
            form.save()
            return redirect('http://127.0.0.1:8000/')
    else:
        form = AddFundamentalsForm()
    return render(request, 'pages/add_fundamentals.html', {'project': project, "form": form})



@login_required
def UpdateFundamentals(request,project_id):
    project= Project.objects.get(pk=project_id)
    form = AddFundamentalsForm(request.POST or None, instance=project)
    if form.is_valid():
        form.save()
        return redirect('dahsboard.html')
    return render(request, 'pages/update_fundamentals.html', {'project': project, "form": form})

HTML

<div class="col-sm-6">
    <div class="dropdown">
        <button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
            Add Evaluation Data <i class="mdi mdi-chevron-down"></i>
        </button>
        <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
            <a class="dropdown-item" href="{% url 'add_fundamentals' project.id %}">Add Critical Fundamentals <span class="badge bg-success"></span></a>
            <a class="dropdown-item" href="{% url 'update_fundamentals' project.id %}">Update Critical Fundamentals</a>
            <a class="dropdown-item" href="#">Secondary Elements</a>
            <a class="dropdown-item" href="#">Other Elements</a>
            <a class="dropdown-item" href="#">Founders and Development Team</a>
            <a class="dropdown-item" href="#">Marketing Assessment</a>
            <a class="dropdown-item" href="#">Product Evaluation</a>
        </div>
    </div>
</div><!-- end col -->

Views.py

@login_required
def Add_or_updateFundamentals(request,project_id):
    project = Project.objects.filter(pk=project_id)
    check_exist = project.exists()
    if request.method == 'POST':
        if check_exist:
            form = AddFundamentalsForm(request.POST,instance=project[0])
        else:
            form = AddFundamentalsForm(request.POST)
        if form.is_valid():
            if not check_exist:
                 form.instance.project = project
            form.save()
            return redirect('http://127.0.0.1:8000/')
    else:
        if check_exist:
            form = AddFundamentalsForm(instance=project[0])
            return render(request, 'pages/update_fundamentals.html', {'project': project, "form": form})
        else:
            form = AddFundamentalsForm()
            return render(request, 'pages/add_fundamentals.html', {'project': project, "form": form})
Вернуться на верх