Pergunta

Estou totalmente compreender a documentação sobre a expansão do aplicativo Comentários em Django, e realmente gostaria de ficar com a funcionalidade automática e ...

No aplicativo atual, eu não tenho absolutamente nenhum uso para uma "URL" para ser apresentado juntamente com um comentário.

Sendo minimamente invasiva da configuração padrão, Como posso evitar que esse campo de aparecer com o formulário de comentário ?

Usando Django 1, ou tronco, e como muitos / built-ins genéricos quanto possível (views genéricas, comentários padrão estabelecidos, etc. Eu tenho apenas uma única visão genérica invólucro até agora).

Foi útil?

Solução

Isto está bem documentado sob personalizando os comentários quadro .

Todo o seu aplicativo irá usar é get_form, retornando uma subclasse da CommentForm com o campo url estourou. Algo como:

class NoURLCommentForm(CommentForm):
    """
    A comment form which matches the default djanago.contrib.comments one, but
    doesn't have a URL field.

    """
NoURLCommentForm.base_fields.pop('url')

Outras dicas

Não posso comentar sobre pós SmileyChris' por algum motivo, então eu vou postá-lo aqui. Mas, eu corri para erros usando apenas resposta SmileyChris'. Você também tem que substituir a função get_comment_create_data porque CommentForm vai olhar para essas chaves post que você removeu. Então aqui está o meu código depois que eu removi três campos.

class SlimCommentForm(CommentForm):
"""
A comment form which matches the default djanago.contrib.comments one, but with 3 removed fields
"""
def get_comment_create_data(self):
    # Use the data of the superclass, and remove extra fields
    return dict(
        content_type = ContentType.objects.get_for_model(self.target_object),
        object_pk    = force_unicode(self.target_object._get_pk_val()),
        comment      = self.cleaned_data["comment"],
        submit_date  = datetime.datetime.now(),
        site_id      = settings.SITE_ID,
        is_public    = True,
        is_removed   = False,
    )


SlimCommentForm.base_fields.pop('url')
SlimCommentForm.base_fields.pop('email')
SlimCommentForm.base_fields.pop('name')

Esta é a função que você está substituindo

def get_comment_create_data(self):
    """
    Returns the dict of data to be used to create a comment. Subclasses in
    custom comment apps that override get_comment_model can override this
    method to add extra fields onto a custom comment model.
    """
    return dict(
        content_type = ContentType.objects.get_for_model(self.target_object),
        object_pk    = force_unicode(self.target_object._get_pk_val()),
        user_name    = self.cleaned_data["name"],
        user_email   = self.cleaned_data["email"],
        user_url     = self.cleaned_data["url"],
        comment      = self.cleaned_data["comment"],
        submit_date  = datetime.datetime.now(),
        site_id      = settings.SITE_ID,
        is_public    = True,
        is_removed   = False,
    )

A minha solução rápida e suja: Eu fiz o do 'e-mail' e 'url' campos campos ocultos, com um valor arbitrário para se livrar de erros 'Este campo é obrigatório'

.

Não é elegante, mas é rápido e eu não tinha a subclasse CommentForm. Todo o trabalho de adicionar comentários foi feito no modelo, o que é bom. Parece que este (aviso: não testado, já que é uma versão simplificada do meu código real):

{% get_comment_form for entry as form %}

<form action="{% comment_form_target %}" method="post"> {% csrf_token %}

{% for field in form %}

    {% if field.name != 'email' and field.name != 'url' %}
        <p> {{field.label}} {{field}} </p>
    {% endif %}

{% endfor %}

    <input type="hidden" name="email" value="foo@foo.foo" />
    <input type="hidden" name="url" value="http://www.foofoo.com" />

    <input type="hidden" name="next" value='{{BASE_URL}}thanks_for_your_comment/' />
    <input type="submit" name="post" class="submit-post" value="Post">
</form>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top