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
Django &引用;模型对象没有属性';保存'&引用;_Django - Fatal编程技术网

Django &引用;模型对象没有属性';保存'&引用;

Django &引用;模型对象没有属性';保存'&引用;,django,Django,我不知道该怎么处理这个错误。如何使用post方法从表单在SQL中添加数据 models.py class Lala(models.Model): PRIORITY_CHOICES = ( (0, '1'), (1, '2'), (2, '3'), (3, '4'), ) name = models.CharField(max_length=20) date = models.DateField()

我不知道该怎么处理这个错误。如何使用post方法从表单在SQL中添加数据

models.py

class Lala(models.Model):
    PRIORITY_CHOICES = ( 
        (0, '1'),
        (1, '2'),
        (2, '3'),
        (3, '4'),
     )
    name = models.CharField(max_length=20)
    date = models.DateField()
    priority = models.CharField(max_length=1, choices=PRIORITY_CHOICES)
Views.py

def add (request):
    if request.method == 'POST': # If the form has been submitted...
        form = AddLala(request.POST) # A form bound to the POST data
        if form.is_valid():
            newform = form.save()
Form.py

class AddLala(forms.Form):
    PRIORITY_CHOICES = ( 
        (0, '1'),
        (1, '2'),
        (2, '3'),
        (3, '4'),
     )
    name = forms.CharField(max_length=100)
    date = forms.DateField()
    priority = forms.CharField(max_length=1, widget=forms.Select(choices=PRIORITY_CHOICES))
add.html

<form target="upload_frame" action="" method="post" enctype="multipart/form-data" >
 {% csrf_token %}
    {{ form.as_p }}<br>
    <input type="submit" name="submit" value="Upload" id="submit">
</form>
所以,我可以将数据添加到数据库中,如果我走下一条路,只需添加数据即可

 lala = Lala(id=None, name='teststep3', date='1943-12-12', priority='High') 
 lala.save()

我真的不明白哪里出了问题,无论我在哪里看到form.save()都是标准方法,但对我来说不是。

尝试使用ModelForm而不是表单:

class Lala(models.Model):
    PRIORITY_CHOICES = ( 
        (0, '1'),
        (1, '2'),
        (2, '3'),
        (3, '4'),
     )
    name = models.CharField(max_length=20)
    date = models.DateField()
    priority = models.CharField(max_length=1, choices=PRIORITY_CHOICES)
在forms.py中:

from django import forms

class LalaForm(forms.ModelForm):
    class Meta:
        model = Lala
然后在视图中,您现有的代码应该(几乎)涵盖它:

def add (request):
    if request.method == 'POST': # If the form has been submitted...
        form = LalaForm(request.POST) # A form bound to the POST data
        if form.is_valid():
            form.save()    # saves a new 'Lala' object to the DB

查看ModelForm的文档。

您真的想在视图中构造一个
AddTest
?没有表单操作…操作='/add'@mossplix:unrelated。检查该方法意味着不需要单独的URL。从文档中我可以看出,Django forms.Form没有save()方法-只有ModelForm实例有这个方法。这是合乎逻辑的-它应该保存什么和在哪里?是的,这一切-网址和形式的行动-我错过了,感谢创造它真的有帮助,我如何才能使用它。现在还有一个问题——当我按下上传按钮时,什么也没发生。“Waiting for localhost”仅此而已,屏幕上没有信息,只有控制台中的输出:/Library/Python/2.6/site packages/django/template/defaulttags.py:52:UserWarning:a{%csrf_token%}在模板中使用,但上下文没有提供值。这通常是由于不使用RequestContext造成的。warnings.warn(“模板中使用了{%csrf_token%}),但上下文未提供该值。这通常是由于未使用RequestCon@user474092-可能需要为此打开一个新问题。看起来您需要在请求上下文中放置一个csrf令牌,如图所示。
def add (request):
    if request.method == 'POST': # If the form has been submitted...
        form = LalaForm(request.POST) # A form bound to the POST data
        if form.is_valid():
            form.save()    # saves a new 'Lala' object to the DB