djangoで最も簡単な方法で更新ビューを使用しようとしていますが、更新されていません。モデルの新しいオブジェクトがデータベースに作成されています。 。私は別のモデルのトラックと同じことをして、そのうまくいっています。私はそれが問題を引き起こしているかもしれない些細なものかもしれないと感じています。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'フィールドを主キーとして設定しましたか?それをしないでください。 –
私はPKと名前Uniqueとしてオートインクリメントを作ったはずです。私は物事を試みているだけです。しかし、それはまだ動作するはずですね。または、ここでPKを編集できないか、または編集可能にするために何かを設定する必要があります –
あなたのPKが編集可能なフィールドで編集している場合、Djangoは保存が作成ではなく更新であることを知る方法がありません。 –