Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过模型表单更新模型实例:';unicode';对象没有属性'_meta&x27;_Python_Django - Fatal编程技术网

Python 通过模型表单更新模型实例:';unicode';对象没有属性'_meta&x27;

Python 通过模型表单更新模型实例:';unicode';对象没有属性'_meta&x27;,python,django,Python,Django,免责声明:我已经阅读了和其他一些相关的问题,但要么我没有理解答案,要么那里讨论的问题实际上是不同的 在我的应用程序中,用户可以查看一个模型的实例Kurs或对其进行编辑——我对这两个操作有两个单独的视图。模型的详细信息如下所示: class Kurs(models.Model): prowadzacy = models.ForeignKey(User) nazwa = models.CharField(max_length=200) [skipping some fields..

免责声明:我已经阅读了和其他一些相关的问题,但要么我没有理解答案,要么那里讨论的问题实际上是不同的

在我的应用程序中,用户可以查看一个模型的实例Kurs或对其进行编辑——我对这两个操作有两个单独的视图。模型的详细信息如下所示:

class Kurs(models.Model):
   prowadzacy = models.ForeignKey(User)
   nazwa = models.CharField(max_length=200)
   [skipping some fields...]
   def __unicode__(self):
       return self.nazwa
   class Meta:
       verbose_name_plural = "Kursy"
如您所见,它有一个unicode方法和一个元类

我使用的模型形式很简单:

class KursForm(ModelForm):
class Meta:
    model = Kurs
    fields = "__all__"      
相关视图如下(我现在不想使用基于类的视图):

我的URL模式包含

url(r'^editcourse/(?P<pk>[0-9]+)/$', views.editcourse, name='editcourse')

我做错了什么?我应该在我的Kurs模型中添加一个空的“\u meta”类吗

在您的
editcourse
视图中,
pk
不是
kurs
实例,它是一个id字符串(在本例中为
'6'

您需要从数据库中获取实例。快捷方式对此很有用。注意,应该将实例传递到if语句的
GET
POST
分支中的表单

from django.shortcuts import get_object_or_404

def editcourse(request, pk):
   kurs = get_object_or_404(Kurs, pk=pk)
    if request.method=='POST':
        form = KursForm(request.POST, instance=kurs)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/polls/usersite')
    else:
        form = KursForm(instance=kurs)

    return render(request, 'polls/editcourse.html', {"form" : form})
<a href="{% url 'polls:editcourse' kur.id %}">EDIT THIS COURSE</a>
<form action="" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
File "[my path here]/views.py" in editcourse
  84.         form = KursForm(instance=pk)

File "/usr/local/lib/python2.7/dist-packages/Django-1.10.3-py2.7.egg/django/forms/models.py" in __init__
  282.             object_data = model_to_dict(instance, opts.fields, opts.exclude)

File "/usr/local/lib/python2.7/dist-packages/Django-1.10.3-py2.7.egg/django/forms/models.py" in model_to_dict
  87.     opts = instance._meta

Exception Type: AttributeError at /polls/editcourse/6/
Exception Value: 'unicode' object has no attribute '_meta'
from django.shortcuts import get_object_or_404

def editcourse(request, pk):
   kurs = get_object_or_404(Kurs, pk=pk)
    if request.method=='POST':
        form = KursForm(request.POST, instance=kurs)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/polls/usersite')
    else:
        form = KursForm(instance=kurs)

    return render(request, 'polls/editcourse.html', {"form" : form})