注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

哈欠涟涟的博客

学习python、pyqt与django

 
 
 

日志

 
 

django一个form两个models  

2010-10-26 21:58:09|  分类: django |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
使用的models非常类似于django-forums的models.下面是forms.py:

class ThreadForm(forms.ModelForm):
    class Meta:
        model = Thread
        exclude = ('forum', 'sticky', 'closed', 'posts', 'views', 'latest_post_time')
     
    def clean_title(self):
        title = self.cleaned_data['title']
        if not alnum_re.search(title):
            raise forms.ValidationError(ugettext("Titles can only contain letters, numbers and underscores"))

        if len(title) < 1:
            raise forms.ValidationError(ugettext("Please enter a title"))
        return title

        
class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        exclude = ('thread', 'author', 'time', 'related_item')
        
    def clean_body(self):
        body = self.cleaned_data['body']
        if len(body) < 1:
            raise forms.ValidationError(ugettext("Please enter some body text"))
        return body

下面是views.py(导入相应的models后):

@login_required
def groupnewthread(request, slug):
    thegroup = get_object_or_404(GroupsOfUser, slug=slug)
    if request.method == 'POST':
        f = request.POST.copy()
        tdata = {
            'title': f['title'],
        }
        pdata = {
            'body': f['body'],
        }
        t = ThreadForm(tdata)
        p = PostForm(pdata)
        if t.is_valid():
            newthread = t.save(commit=False)
            newthread.forum = thegroup
            
            
            if p.is_valid():
                newthread.save()
                newpost = p.save(commit=False)
                newpost.thread = newthread
                newpost.author = request.user
                newpost.save()
          
                strmessage = 'has created a thread <a href="%s">%s</a>' % (newthread.get_absolute_url(), newthread.title)
                usm = UserStatus(user = newpost.author, message = strmessage)
                usm.save()
         
                return HttpResponseRedirect(reverse('groupdetail', args=[thegroup.slug]))
        
    else:

        t = ThreadForm()
        p = PostForm()
        
    objContext = RequestContext(request, {'threadform': t, 'postform': p})
    return render_to_response('groups/group_thread_add.html', objContext)

form的模板:
{% extends "base.html" %}
{% load i18n %}
{% block title %}
    {% trans 'Add a new group thread' %} 
{% endblock %}
{% block body %}
    <h1>{% trans 'Create a new group thread' %}</h1>
<div class="column span-14">
    {% if t.errors %}
    <h3>{% blocktrans count t.errors|length as count %}Please correct the following error:{% plural %}Please correct the following errors:{% endblocktrans %}</h3>
    {% endif %} 
    {% if p.errors %}
    <h3>{% blocktrans count p.errors|length as count %}Please correct the following error:{% plural %}Please correct the following errors:{% endblocktrans %}</h3>
    {% endif %}
    <table>
    <form method="post" action=".">
        {{ threadform.as_table }}
        {{ postform.as_table }}
    <tr><td></td><td><input type="submit" value="{% trans "Update" %}"/></td></tr>
    </form>
    </table>
</div>
{% endblock %}
  评论这张
 
阅读(1957)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017