4

コメント システムが必要なアプリケーションを作成しています。Django のコメント アプリを使用することにしましたが、少し変更する必要がありました。まず、ユーザーの電子メール ID を必須にしたくありません。次に、コメント付きのファイルを添付するオプションが必要です。

したがって、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 は引き続き必須です。何か案は?

4

4 に答える 4

2

問題がモデルに関係していると確信していますか? BaseCommentAbstractModelは定義さえしていません。それuser_emailはメインCommentモデルだけにありblank=True、どのイベントでも定義されています。

カスタムフォームを提供する必要がある可能性が高いと思います。メインCommentDetailsFormはモデルフォームではありません - 必須フィールドを含むフィールドを手動で定義しますemail。それもオーバーライドする必要があるようです。

于 2011-01-31T10:32:53.597 に答える
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
于 2011-01-31T10:39:44.103 に答える
0

簡単な答え:いいえ。

http://docs.djangoproject.com/en/dev/topics/db/models/#field-name-hiding-is-not-permitted

長い答え:それは状況次第です。

たとえば、initメソッドとsave()メソッドを上書きして、フィールドにデフォルト値(たとえば、anonymous @ example.com、定義上偽のアドレス)を入力すると、そのケースをコードで管理できます。

于 2011-01-31T21:59:21.657 に答える