2009-09-21 11 views
12

Tamamen Django Yorumlar uygulamasını genişleterek belgelerine anlama ediyorum ve gerçekten otomatik işlevsellik ama ile sopa istiyorum ... akım uygulamasındaDjango Yorumlar: Kullanıcı URL'sini kaldırmak, modeli genişletmek istemiyorum. Nasıl?

, ben "bir kesinlikle hiçbir faydası var URL "bir yorum ile birlikte gönderilecek.

varsayılan kurulum minimal invaziv olan nasıl yorum formu ile gösterilmesini bu alanı engelleyebilirim?

Django 1 veya Trunk öğelerini ve olabildiğince çok genel/built-in'i kullanma (genel görünümler, varsayılan yorumlar vb.). Şimdiye kadar yalnızca tek bir genel görünüm sarmalayıcım var).

cevap

9

Bu, customizing the comments framework altında belgelenmiştir.

Tüm uygulamanız, CommentForm alt sınıfını atılan URL alanı ile döndürerek get_form kullanacaktır. gibi bir şey: Ben nedense SmileyChris' yazı üzerine yorum yapamam

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

Ben belgelerine harika katılıyorum ama yapmak "base_fields" yolumu bulma ve kullanma iddia gerekiyor. pop() kolayca rastladığım bir şey değildi. Evet, yorum çerçevesi iyi belgelenmiştir, ancak "bu" değildir. Böyle bir şey bulmak benim sorumluluğumun olduğunu kabul ediyorum ve zamanınız ve yardımlarınız için çok müteşekkirim! Sağ ol, kanka! –

+0

Bu, Django 1.4'teki hataları atar. Ayrıca, killerbarney'nin çözümünde belirtilen get_comment_create_data yöntemini de geçersiz kılmanız gerekir. –

16

yüzden buraya göndermek için gidiyorum. Ancak, sadece SmileyChris'in yanıtını kullanarak hatalara rastladım. Ayrıca, get_comment_create_data işlevinin üzerine yazmanız gerekir, çünkü CommentForm, kaldırdığınız bu Post tuşlarını arayacaktır. Yani üç alanı kaldırdıktan sonra kodum.

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

Bu

Eğer

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

Bu içe aktarma ifadelerini gerekir: django.contrib.contenttypes.models 'Django uzatılmasına yorumlar çerçevesinde bağlı django.conf ithalat ayarlarına ithalat datetime – PhoebeB

+0

ithal force_unicode django.utils.encoding gelen ContentType içe dan. contrib.comments' veya 'django_comments' (ikincisi daha yenidir),' django_comments.forms from CommentForm' – jozxyqk

5

Benim hızlı ve kirli çözüm üzerine yazıyorsunuz fonksiyonudur: Ben kurtulmak için keyfi bir değere sahip 'e' ve 'url' gizli alanlar alanlar, yapılan 'bu alan gereklidir' hataları.

Bu zarif değil, ama hızlı ve CommentForm alt sınıfını yapmak zorunda değildim. Yorum eklemeye yönelik tüm çalışmalar şablonda yapıldı, bu da güzel. Bu şuna benzer (uyarı: değil test, benim gerçek kod basitleştirilmiş versiyonu beri):

{% 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="[email protected]" /> 
    <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> 
İlgili konular