Django updateView всегда обновляет первый элемент в базе данных - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть простой model.py, который имеет отношение ForeignKey.

    class Release(models.Model):
        name = models.CharField(max_length=200, db_index=True, unique=True)

    class Feature(models.Model):
        release = models.ForeignKey(Release, on_delete=models.SET_NULL, null=True, related_name='features')
        name = models.CharField(max_length=200, db_index=True, unique=True)

В url.py

        path('release/<int:pk>/feature/<int:pk1>/update/', views.FeatureUpdate.as_view(), name='feature-update'),

В views.py:

    class FeatureUpdate(UpdateView):
        model = Feature
        fields = ['name']

In feature_form. html

    {% block content %}
    <form action="" method="post">
    {% csrf_token %}
    <table>
    {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
    <input type="button" value="Cancel" onclick="history.back()">
    </form>
    {% endblock %}

Допустим, у меня есть 1 релиз (release-A) и 2 функции (feature-A и feature-B) в базе данных.

Когда Я пытаюсь редактировать функцию-А, это работает. Однако, когда я пытаюсь редактировать объект-B: форма показывает данные объекта-A, а также редактирует объект-A.

Я новичок в django и не могу go дальше. Пожалуйста, помогите ..

1 Ответ

1 голос
/ 29 апреля 2020

Если вы обновляете функцию, просто передайте pk функции из URL-адресов следующим образом.

    path('feature/<int:pk>/update/', views.FeatureUpdate.as_view(), name='feature-update'),

Теперь в представлении укажите context_object_name до feature, чтобы ваш feature.pk работал с шаблоном. А также вам нужно дать template_name для обновления

class FeatureUpdate(UpdateView):
        model = Feature
        fields = ['name']
        context_object_name='feature'
        template_name='your_template.html'

Так что ваш URL для вызова обновления будет таким:

<a class="btn btn-primary" href="{% url 'feature-update' feature.pk %}">Update</a>
...