2011-01-31 9 views
2

私はコメントシステムが必要なアプリケーションを作成しています。私はDjangoのコメントアプリを使用することにしましたが、少し変更する必要がありました。まず、ユーザーの電子メールIDが必須であることを望んでいません。次に、コメント付きのファイルを添付するオプションが必要です。基本抽象クラスDjangoのサブクラスからフィールドを削除します

私はBaseCommentAbstractModelからサブクラス化することにしました。

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= models.EmailField(max_length=100, blank=True) 

ことと私のコードは次のようになります。

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

別のフィールドを追加するUSER_EMAILをオーバーライドする必要があります。 user_emailは依然として必須です。何か案は?

答えて

2

問題はモデルで行うことが確実ですか? BaseCommentAbstractModeluser_emailと定義されていませんが、それはメインのCommentモデルにのみあり、どんな場合でもblank=Trueと定義されています。

私はあなたがカスタムフォームを提供する必要がある可能性が高いと思います。メインのCommentDetailsFormはモデルフォームではなく、必要なフィールドを含むフィールドを手動で定義します(emailフィールド)。あなたもそれを無効にする必要があるように思えます。

+0

ありがとうございます、私はフォームを作成しようとします。しかし、私がコメントから継承すると仮定することができます。それを変更する可能性はありますか?グーグルでは、.96バージョンでMETAというクラスがあり、remove_field =( 'user_name'、)を追加できることがわかりましたが、これは機能しません。 – satran

1

djangoの一般的なビューの助けを借りてカスタムフォームを作成するだけです。

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 
関連する問題