2011-01-31 86 views
2

我正在创建需要注释系统的应用程序。我决定使用Django的评论应用程序,但需要稍微修改一下。首先,我不希望用户的电子邮件ID是强制性的,接下来我需要一个选项来附加评论文件。从基类抽象类的子类中删除字段Django

因此我决定从BaseCommentAbstractModel继承子类。现在我需要重写USER_EMAIL是

user_email= models.EmailField(max_length=100, blank=True) 

,并添加一个字段

file = models.FileField(upload_to='data/files') 

我的代码应该是这样的:

from django.db import models 
from django.contrib.comments.models import BaseCommentAbstractModel 

class CommentWithFile(BaseCommentAbstractModel): 
    '''This is a hack of the Comment model to remove email and add a filefield''' 
    user_email = models.EmailField(max_length=100, blank=True) 
    file = models.FileField(upload_to='data/files') 

但这不起作用。 user_email仍然是强制性的。有任何想法吗?

回答

2

您确定问题与模型有关吗? BaseCommentAbstractModel甚至没有定义user_email,这只在主要的Comment模型中 - 在任何情况下它都被定义为blank=True

我认为你更需要提供自定义表单。主CommentDetailsForm不是一个模型 - 它手动定义其字段,包括所需的email字段。听起来你也需要重写。

+0

谢谢,我会尝试创建一个表单。但让我们假设我从评论继承。有没有可能改变它?谷歌搜索我发现在.96版本中有一个名为META的类,我可以添加remove_field =('user_name',)但这不起作用。 – satran 2011-01-31 16:06:18

1

只需在django通用视图的帮助下创建自定义表单。

Models.py应该是这个样子:

from django.utils.translation import ugettext_lazy as _ 
from django.db import models 
from django import forms 

    class Comments(models.Model): 
     name = models.CharField(_('Name'), max_length=30) 
     email = models.EmailField(_('Email'), blank=True, null=True) 
     comment = models.TextField(_('Comment')) 
     date = models.DateTimeField(_('Date'), auto_now_add=True) 
     file = models.FileField(_('File'), upload_to='data/files') 
     publish = models.BooleanField(_('Publish')) 

     def __unicode__(self): 
      return self.name