首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用ModelForm帮助django bugtrack评论系统

使用ModelForm帮助django bugtrack评论系统
EN

Stack Overflow用户
提问于 2011-03-22 15:51:51
回答 1查看 129关注 0票数 0

我正在尝试使用django向一个bug跟踪应用程序添加一个注释组件。我有一个用于注释的文本字段和一个by字段--由用户id自动传播。

我希望注释文本字段在有人保存注释后变为只读。我尝试过几种方法。到目前为止,我想出的最好方法是将注释模型传递给ModelForm,然后使用表单小部件属性将字段转换为只读。

models.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class CommentForm(ModelForm):                                                 
    class Meta: 
        model = Comment
        exclude = ('ticket', 'submitted_date', 'modified_date')               
    def __init__(self, *args, **kwargs):
        super(CommentForm, self).__init__(*args, **kwargs)                    
        instance = getattr(self, 'instance', None)                            
        if instance and instance.id:
            self.fields['comments'].widget.attrs['readonly'] = True           

class Comment(models.Model):
    ticket = models.ForeignKey(Ticket)
    by = models.ForeignKey(User, null=True, blank=True, related_name="by")    
    comments = models.TextField(null=True, blank=True)
    submitted_date = models.DateField(auto_now_add=True)                      
    modified_date = models.DateField(auto_now=True)                           
    class Admin:
        list_display = ('comments', 'by',
            'submitted_date', 'modified_date')
        list_filter = ('submitted_date', 'by',)                               
        search_fields = ('comments', 'by',)

在bug跟踪程序中,我的评论模型与我的票据模型相关联。我将注释放在admin.py中的内联中,从而将注释连接到票据。现在问题变成了:如何将ModelForm传递到TabularInline中?TabularInline需要一个定义好的模型。然而,一旦我将一个模型传递到我的内联中,传递一个模型表单就变得毫无意义了。

admin.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class CommentInline(admin.TabularInline):
    model = Comment
    form = CommentForm()
    search_fields = ['by', ]
    list_filter = ['by', ]
    fields = ('comments', 'by')
    readonly_fields=('by',)
    extra = 1

有谁知道如何在不让常规模型的字段覆盖ModelForm的情况下将ModelForm传递到TabularInline中?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2011-03-22 16:08:38

不要在TabularInline子类中实例化表单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    form = CommentForm
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5393952

复制
相关文章
Django之ModelForm
  在前面有篇博客,我写了一个叫forms组件的东西,可以帮助我们完成校验数据、渲染标签功能和在前端页面局部刷新功能,功能封装的已经很好了,当时已经很开心了。但万万没想到,还有比它功能更强大的东西。forms组件只能渲染出type=text类型的标签,而且还要我们写无数多个字段,然后跟上校验条件,用forms组件做编辑页面时,还要手动的把编辑的对象的每一个值写入标签的value,这些等等虽然相较没用forms组件之前更方便了,但跟ModelForm比起来,都显得苍白无力,把ModelForm吹了那么久,现在就让我们来见识见识ModelForm的强大。
py3study
2020/01/22
5700
Django之ModelForm
简介 Model + Form ==> ModelForm。model和form的结合体,所以有以下功能: 验证 数据库操作 Form回顾 models.py class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): username = models.CharField(max_length=32) email = models.Ema
人生不如戏
2018/05/30
6180
django 关于 ModelForm
大家在写表单的时候,会发现表单中的Field和模型中的Field基本上是一模一样的,而且表单中需要验证的数据,也就是我们模型中需要保存的。那么这时候我们就可以将模型中的字段和表单中的字段进行绑定。 比如现在有个Article的模型。示例代码如下:
用户2200417
2023/01/30
8100
33.Django ModelForm
ModelForm  1.ModeForm简单验证 from django.db import models # Create your models here. class UserInfo(models.Model): # verbose_name 等同于Form类里面的label username = models.CharField(verbose_name='用户',max_length=32) email = models.EmailField(verbose_nam
zhang_derek
2018/04/11
1.5K0
Django的Modelform组件
先举个例子:比如数据库中有一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等信息,现在让你写一个创建学生的页面,你该怎么写?首先会在前端罗列这些字段,让用户填写,然后后台逐个接收用户的输入,创建一个新的学生对象,保存。然而过程中未合法性验证,我们需要在前端判断用户输入是否合法,比如姓名必须在多少字符以内,电话号码必须是多少位的数字,邮箱必须是邮箱的格式,当然可以手动写限制,各种判断,然后除了麻烦可以有个更优雅的方法:ModelForm
菲宇
2022/12/21
4020
Django之ModelForm详解
前言   这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来。先来一个简单的例子来看一下这个东西怎么用:   比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢? 首先我们会在前端一个一个罗列出这些字段,让用户去填写,然后我们从后天一个一个接收用户的输入,创建一个新的学生对象,保存起来。   其实,重点不是这些,而是合法性验证,我们需要在前端判断用户输入是否合法,比
新人小试
2018/06/13
1K0
django之评论系统及多级评论
相对来说,评论其实是另外一个比较独立的功能。Django 提倡,如果功能相对比较独立的话,最好是创建一个应用,把相应的功能代码写到这个应用里。我们的第一个应用叫 blog,它里面放了展示博客文章列表和细节等相关功能的代码。而这里我们再创建一个应用,名为 comments,这里面将存放和评论功能相关的代码。首先激活虚拟环境,然后输入如下命令创建一个新的应用:
菲宇
2019/06/13
6.9K1
django之评论系统及多级评论
Django006:ModelForm组件
基于以上的痛点,我们在使用Django开发的时候就可以引用ModelForm组件,他是Django中特有的,并在传统的开发的步骤的基础上,优化了以上总结的痛点。
淼学派对
2023/10/14
2360
Django006:ModelForm组件
Django源码学习-18-ModelForm
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2019/08/16
7580
Django源码学习-18-ModelForm
python测试开发django-109.ModelForm模型表单的使用
django的表单有2种:forms.Form 和 forms.ModelForm。ModelForm顾名思义是将模型和表单结合起来,这个功能是非常强大的!
上海-悠悠
2021/07/22
1.1K0
Django评论库
查了一下,Django原本会自带一个评论库组件,而从1.6版本以后就没有自带了,需要自己安装。
菲宇
2019/06/13
1K0
使用ValineAdmin完善评论系统
在更换主题后的这一段时间里,博客运行良好,内容我也在不断完善,评论自然是继承原来的 Valine 也运行正常,但是,其实从上个主题开始,我就没有配置邮件的评论系统,所以对于评论的查看,我一直都是登陆 LeanCloud 后台来完成的。当然,默认的邮件提醒我是配置了的,但那个太简陋了,几乎没有使用价值。关于 ValineAdmin,群友早就配置过了,这次终于轮到自己来配一下了。
ZONGLYN
2020/06/29
6090
使用ValineAdmin完善评论系统
12.Django基础十之Form和ModelForm组件
  我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。
changxin7
2019/10/08
3.4K0
django中ModelForm多表单组合的解决方案
django是Python语言快速实现web服务的大杀器,其开发效率可以非常的高!但因为秉承了语言的灵活性,django框架又太灵活,以至于想实现任何功能都有种“条条大路通罗马”的感觉。这么多种选择放在一起,如何分出高下?我想此时的场景下就两个标准:
陶辉
2019/06/21
3.4K0
Django使用普通表单、Form、以及modelForm操作数据库方式总结
Django使用普通表单、Form、以及modelForm操作数据库主要应用于增删该查的情景下,流程通用如下,只是实现方式不一样: 进入填写表单页面; 在表单页面填写信息,并提交; 表单数据验证 验证成功,和数据库进行交互(增删改查); 验证成功,页面提示表单填写失败; 一、Django使用普通表单操作数据库 1、html代码: <form action="/add/" method="post" name="addbook">   {% csrf_token %} <p>   <p><span>用户:</span><input type="text" placeholder="用户" name="author"></p>   <p><span>用户年龄:</span><input type="text" placeholder="用户年龄" name="author_age"></p>   <input type="submit" value="增加"> </form> 2、点击增加后,页面判断填写字段是否合法(使用JavaScript或JQuery实现判断) 前端校验后,在/add/对应的view对数据进行校验以及数据保存 from polls.models import Person #导入对应model from django.http import HttpResponseRedirecdef addbooktodatabase(request): # 获取参数前端传递的参数 if request.method == "GET": author_name = request.GET["author"] author_age = request.GET["author_age"] else: author_name = request.POST["author"] author_age = request.POST["author_age"] #对前端参数按业务逻辑进行校验 #代码省略 ## 保存数据到数据库 person = Person() person.name = author_name person.age = author_age person.save() return HttpResponseRedirect('/addok/') 二、Django使用自有插件Form表单操作数据库 和方法一的使用普通表单相比,使用django的Form表单更方便快捷地生成前端form表单以及对字段的校验规则; from django.shortcuts import render, HttpResponse, redirect from django.forms import Form, fields, widgets from model import * #导入对应的model #Form验证 class TestForm(Form): inp1 = fields.CharField(min_length=4, max_length=8) inp2 = fields.EmailField() inp3 = fields.IntegerField(min_value=10, max_value=100) View文件如下(添加): def test(request): if request.method == 'GET': obj = TestForm() return render(request, 'test.html', {'obj': obj}) else: form = TestForm(request.POST) if obj.is_valid(): #验证合格,前端的数据保存在form.cleaned_data,model的create函数保存到数据库       obj = models.Article.objects.create(**form.cleaned_data)       models.ArticleDetail.objects.create(content=content, article=obj) return HttpResponse('提交成功') 如果
菲宇
2019/06/13
2.7K0
day74-<项目>-forms.ModelForm的使用
使用方法: 1.首先,在制作表单的时候,一般的方法是继承 forms.Form,得自己一个一个写 image.png 2.在数据库已经创建好字段的状态下,可以直接拿数据库的字段做form模板,继承方式变成forms.ModelForm image.png 3.关于字段的定义 image.png image.png 4.关于应用模板的一个注意点 image.png image.png
少年包青菜
2019/10/15
3830
django 无限层级的评论
https://github.com/zmrenwu/django-mptt-comments
py3study
2020/03/04
1K0
django 无限层级的评论
在 NexT 中使用 Valine 评论系统
本文包括 NexT 主题的 v5 和 v6 两个版本的使用方法,以及对 TopX 页面的兼容处理。
莲花海
2020/01/21
1K0
Hexo NexT 评论系统 Valine 的使用
注明:以下方案是在 Valine 1.4.9 版本下完成,对于其他版本应该会根据实际情况修改参数,使用 F12 查看参数修改即可使用!(说明于 2020 - 04 - 25)
零式的天空
2022/03/28
1.7K0
点击加载更多

相似问题

Django -使用树构建评论系统

20

Django博客-评论系统

136

django rest框架评论系统

14

Django评论和评级系统

21

如何使用Django MultipleChoiceField ModelForm保存ModelForm数据

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文