تعليقات Django: هل ترغب في إزالة عنوان URL للمستخدم، وليس قم بتوسيع النموذج. كيف؟

StackOverflow https://stackoverflow.com/questions/1456267

سؤال

أنا أفهم تماما الوثائق حول توسيع تطبيق التعليقات في Django، وأود حقا التمسك بالوظائف التلقائية لكن...

في التطبيق الحالي، ليس لدي أي فائدة على الإطلاق لتقديم "URL" مع تعليق.

يجرى gasthasive الحد الأدنى من الإعداد الافتراضي، كيف يمكنني منع هذا الحقل من الظهور مع نموذج التعليق?

باستخدام Django 1، أو Trunk، وعلى أكبر عدد ممكن من الأماكن العامة / المدمج (مناظر عامة، إعداد التعليقات الافتراضية، إلخ. لدي فقط غلاف عرض عام واحد حتى الآن).

هل كانت مفيدة؟

المحلول

هذا موثم جيدا تحت تخصيص إطار التعليقات.

جميع التطبيق الخاص بك سوف تستخدم هو get_form, ، وعودة فرعية من CommentForm مع حقل عنوان URL برزف. شيء مثل:

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')

نصائح أخرى

لا أستطيع التعليق على وظيفة Smileychris لسبب ما، لذلك أنا ذاهب لنشره هنا. ولكن، ركضت أخطاء باستخدام استجابة مجرد Smileychris. يجب عليك أيضا الكتابة فوق وظيفة Get_COMMENT_CREATE_DATA لأن التعليقات سوف تبحث عن هذه المفاتيح التي قمت بإزالتها. حتى هنا رمز بلدي بعد إزالة ثلاثة حقول.

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')

هذه هي الوظيفة التي تكتملها

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,
    )

الحل السريع والقذرة: قمت بإجراء حقول "البريد الإلكتروني" و "عنوان URL" الحقول المخفية، مع وجود قيمة تعسفية للتخلص من أخطاء "هذا الحقل مطلوب".

إنه ليس أنيقا، لكنه سريع ولم يكن لدي تعليق فرعي. تم إجراء كل عمل إضافة التعليقات في القالب، وهو لطيف. يبدو هذا (تحذير: لم يتم اختباره، لأنها نسخة مبسطة من الرمز الفعلي الخاص بي):

{% 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top