gpt4 book ai didi

python - Django - 更新 View ,创建新对象而不是更新,

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:53 25 4
gpt4 key购买 nike

我正在尝试以最简单的方式在 Django 中使用更新 View ,但它没有被更新,而是在数据库中创建了一个新的模型对象。我对另一个模型 Track 做了同样的事情,并且工作正常。我觉得可能是一些微不足道的事情导致了问题。

我这里修改的是模型的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})

最佳答案

好吧,正如其他人在评论中所说的那样,您的 View 创建了新对象而不是更新对象,因为您拥有可编辑的主键。

您看,卧底 UpdateView 为您的模型创建表单并调用该表单的 save

BaseModelFormsave方法操作self.instance属性。如果 pk 没有找到实例,则会创建一个新实例。因此,我建议您使用不可编辑的主键重新创建模型,并将名称保留为简单的字符字段。

关于python - Django - 更新 View ,创建新对象而不是更新,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38392514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com