• [django]django corepython核心编程


    model meta排序

    class BlogPost(models.Model):
        title = models.CharField(max_length=150)
        body = models.TextField()
        timestamp = models.DateTimeField()
    
        class Meta:
            ordering = ('-timestamp',)
    
    def archive(request):
        posts = BlogPost.objects.all()[:10]
        return direct_to_template(request, 'archive.html',
            {'posts': posts, 'form': BlogPostForm()})
    
    def create_blogpost(request):
        if request.method == 'POST':
            form = BlogPostForm(request.POST)
            if form.is_valid():
                post = form.save(commit=False)
                post.timestamp = datetime.now()
                post.save()
        return HttpResponseRedirect('/blog/')
    
    

    django的form处理数据

    1.生成html
    2.验证数据合法性
    3.直接存库

    定义1个form

    class BlogPost(models.Model):
        title = models.CharField(max_length=150)
        body = models.TextField()
        timestamp = models.DateTimeField()
    

    以前是这样的

    class BlogPostForm(forms.Form):
        title = forms.CharField(max_length=150)
        body = forms.CharField(widget=forms.Textarea)
        timestamp = forms.DateTimeField()
    

    现在可以这样了

    class BlogPostForm(forms.ModelForm):
        class Meta:
            model = BlogPost
    

    在这个例子中,不信赖用户输入正确的时间戳,而是想让应用为每篇博文以可编程的方
    式添加这个内容。这一点不难,只须添加额外一个名为exclude的属性,从生成的HTML中
    移除这个表单项。向blog/models.py文件中添加相应的导入语句,并在该文件的底部,BlogPost
    定义的后面添加完整的BlogPostForm类。

    class BlogPostForm(forms.ModelForm):
        class Meta:
            model = BlogPost
            exclude = ('timestamp',)
    

    看下form如何生成html的

    除了save

    保存数据: 有了form后就不用这样保存数据了

    def create_blogpost(request):
        if request.method == 'POST':
            BlogPost(
            title=request.POST.get('title'),
            body=request.POST.get('body'),
            timestamp=datetime.now(),
            ).save()
        return HttpResponseRedirect('/blog/')
    

    可以这样

    def create_blogpost(request):
        if request.method == 'POST':
            form = BlogPostForm(request.POST)
            if form.is_valid():
                form.save()
        return HttpResponseRedirect('/blog/')
    

    遗憾的是,因为有timestamp,所以不能这样做。必须对前面的HTML表单生成过程进行特殊处理。所以需要像下面这样,使用if语句。

    if form.is_valid():
        post = form.save(commit=False)
        post.timestamp=datetime.now()
        post.save()
    
  • 相关阅读:
    SQL横表纵表转换和对比
    计算机书籍
    附加原型链
    Object.create()
    解构赋值是浅拷贝
    Object.keys(xxx)与Object.getOwnPropertyNames(xxx)
    剑指 Offer 45. 把数组排成最小的数
    剑指 Offer 46. 把数字翻译成字符串
    剑指 Offer 43. 1~n 整数中 1 出现的次数
    剑指 Offer 41. 数据流中的中位数
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/9674637.html
Copyright © 2020-2023  润新知