Я пытаюсь использовать представление обновления в django, простейшим образом, но он не обновляется, а в базе данных создается новый объект модели , Я сделал то же самое для другой модели Track, и ее работа отлично. Я чувствую, что это может быть что-то тривиальное, что может вызвать проблему.Django - Обновить вид, создавая новые объекты вместо обновления,
Здесь я изменяю PK модели. Может ли это быть причиной?
Вид:
from django.views.generic.edit import UpdateView
from musictracker.models.datamodels.Genre import Genre
class EditGenre(UpdateView):
model = Genre
template_name = "editGenre.html"
fields = ['name']
Шаблон:
{% extends 'base.html' %} {% load addcss %} {% block content %}
<div id="regContainer">
<ul>
<!-- {% if form.errors %} {{form.errors}} {% endif %} -->
</ul>
<div class="form-group">
<form method="post" action="">
{% csrf_token %}
{% for field in form %}
<label class="control-label" for="form-control input-sm">{{field.label_tag }}</label>
<br /> {{field|addcss:"form-control input-sm"}}
<br />
{% endfor %}
<input type="submit" id="register" value="Edit Genre" class="btn btn-default">
</form>
</div>
</div>
{% endblock %}
URLS.py
from django.conf.urls import url
from django.contrib import admin
''' View Imports '''
from views import TrackList
from views import AddTrack
from views import TrackDetail
from views import EditTrack
from views import GenreList
from views import GenreDetail
from views import AddGenre
from views import EditGenre
urlpatterns = [
url(r'^tracks/', TrackList.as_view(),name='all-tracks'),
url(r'^addTrack/', AddTrack.as_view(),name='add-tracks'),
url(r'^editTrack/(?P<pk>[0-9]+)', EditTrack.as_view(),name='edit-track'),
url(r'^track/(?P<pk>[0-9]+)', TrackDetail.as_view(),name='track'),
url(r'^genres/', GenreList.as_view(),name='all-genres'),
url(r'^addGenre/', AddGenre.as_view(),name='add-genre'),
url(r'^editGenre/(?P<pk>[a-zA-Z0-9]+)', EditGenre.as_view(),name='genre'),
url(r'^genre/(?P<pk>[a-zA-Z0-9]+)', GenreDetail.as_view(),name='genre'),
]
Модель:
class Genre(models.Model):
'''
This is a model for Genres
'''
name = models.CharField(max_length=20,primary_key=True,editable=True)
songcount = models.IntegerField()
def __unicode__(self):
return self.name
def get_absolute_url(self):
return reverse('genre', kwargs={'pk': self.pk})
Почему вы установили поле 'name' в качестве первичного ключа? Не делай этого. –
Я знаю, что должен был сделать автоматический приращение как ПК и имя Unique. Я просто пытаюсь. Но он все равно должен работать, не так ли? Или PK не редактируется здесь/или нам нужно настроить что-то, чтобы сделать его редактируемым. –
Если ваш ПК является редактируемым полем и вы его редактируете, то Django не знает, что сохранение - это обновление, а не создание , –