2017-07-09 13 views
5

में फार्म और प्रदर्शन से डेटा लाने मैं एक Django tutorial- https://github.com/codingforentrepreneurs/Advancing-the-Blog/tree/master/src/postsटेम्पलेट

मैं एक forms.py में एक नए क्षेत्र 'UserC' बना रहा हूं की पोस्ट एप्लिकेशन को संशोधित करने के कोशिश कर रहा हूँ:

userc = forms.ModelChoiceField(queryset=User.objects.filter(is_staff=True)) 

मैंने विभिन्न विधियों का प्रयास किया है लेकिन मैं चयनित उपयोगकर्ता को टेम्पलेट में प्रदर्शित करने में असमर्थ हूं।

मुझे views.py में क्या जोड़ना चाहिए?

संपादित करें: मैं कोशिश की है {{obj.userc}} {{instance.userc}} टेम्पलेट्स में चयनित उपयोगकर्ता प्रदर्शित करने के लिए।

views.py

from django.contrib import messages 
from django.contrib.contenttypes.models import ContentType 
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 

from django.db.models import Q 
from django.http import HttpResponse, HttpResponseRedirect, Http404 
from django.shortcuts import render, get_object_or_404, redirect 
from django.utils import timezone 

from comments.forms import CommentForm 
from comments.models import Comment 
from .forms import PostForm 
from .models import Post 

from django.contrib.auth.models import User 

def post_create(request): 
    if not request.user.is_staff or not request.user.is_superuser: 
     raise Http404 

    form = PostForm(request.POST or None, request.FILES or None) 
    if form.is_valid(): 
     instance = form.save(commit=False) 
     instance.user = request.user 
     instance.save() 
     # message success 
     messages.success(request, "Successfully Created") 
     return HttpResponseRedirect(instance.get_absolute_url()) 
    context = { 
     "form": form, 
    } 
    return render(request, "post_form.html", context) 





def abc(request): 

    if request.method == "POST": 
     #Get the posted form 
     form = PostForm(request.POST) 

     if form.is_valid(): 
     userc = form.cleaned_data['userc'] 
    return render(request, 'post_detail.html', {"selected_user" : userc}) 

















def post_detail(request, slug=None): 
    instance = get_object_or_404(Post, slug=slug) 
    if instance.publish > timezone.now().date() or instance.draft: 
     if not request.user.is_staff or not request.user.is_superuser: 
      raise Http404 
    share_string = quote_plus(instance.content) 




    initial_data = { 
      "content_type": instance.get_content_type, 
      "object_id": instance.id 
    } 
    form = CommentForm(request.POST or None, initial=initial_data) 
    if form.is_valid() and request.user.is_authenticated(): 
     c_type = form.cleaned_data.get("content_type") 
     content_type = ContentType.objects.get(model=c_type) 
     obj_id = form.cleaned_data.get('object_id') 
     content_data = form.cleaned_data.get("content") 
     parent_obj = None 
     try: 
      parent_id = int(request.POST.get("parent_id")) 
     except: 
      parent_id = None 

     if parent_id: 
      parent_qs = Comment.objects.filter(id=parent_id) 
      if parent_qs.exists() and parent_qs.count() == 1: 
       parent_obj = parent_qs.first() 


     new_comment, created = Comment.objects.get_or_create(
          user = request.user, 
          content_type= content_type, 
          object_id = obj_id, 
          content = content_data, 
          parent = parent_obj, 
         ) 
     return HttpResponseRedirect(new_comment.content_object.get_absolute_url()) 


    comments = instance.comments 
    context = { 
     "title": instance.title, 
     "instance": instance, 
     "share_string": share_string, 
     "comments": comments, 
     "comment_form":form, 
    } 
    return render(request, "post_detail.html", context) 

def post_list(request): 
    today = timezone.now().date() 
    queryset_list = Post.objects.active() #.order_by("-timestamp") 
    if request.user.is_staff or request.user.is_superuser: 
     queryset_list = Post.objects.all() 

    query = request.GET.get("q") 
    if query: 
     queryset_list = queryset_list.filter(
       Q(title__icontains=query)| 
       Q(content__icontains=query)| 
       Q(user__first_name__icontains=query) | 
       Q(user__last_name__icontains=query) 
       ).distinct() 
    paginator = Paginator(queryset_list, 8) # Show 25 contacts per page 
    page_request_var = "page" 
    page = request.GET.get(page_request_var) 
    try: 
     queryset = paginator.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer, deliver first page. 
     queryset = paginator.page(1) 
    except EmptyPage: 
     # If page is out of range (e.g. 9999), deliver last page of results. 
     queryset = paginator.page(paginator.num_pages) 


    context = { 
     "object_list": queryset, 
     "title": "List", 
     "page_request_var": page_request_var, 
     "today": today, 
    } 
    return render(request, "post_list.html", context) 





def post_update(request, slug=None): 
    if not request.user.is_staff or not request.user.is_superuser: 
     raise Http404 
    instance = get_object_or_404(Post, slug=slug) 
    form = PostForm(request.POST or None, request.FILES or None, instance=instance) 
    if form.is_valid(): 
     instance = form.save(commit=False) 
     instance.save() 
     messages.success(request, "<a href='#'>Item</a> Saved", extra_tags='html_safe') 
     return HttpResponseRedirect(instance.get_absolute_url()) 

    context = { 
     "title": instance.title, 
     "instance": instance, 
     "form":form, 
    } 
    return render(request, "post_form.html", context) 



def post_delete(request, slug=None): 
    if not request.user.is_staff or not request.user.is_superuser: 
     raise Http404 
    instance = get_object_or_404(Post, slug=slug) 
    instance.delete() 
    messages.success(request, "Successfully deleted") 
    return redirect("posts:list") 
+0

उत्तर देना असंभव है। आप उस क्षेत्र के साथ क्या करना चाहते हैं? आप किस आउटपुट की उम्मीद कर रहे हैं? आपका शेष दृश्य कैसा दिखता है? –

+0

@DanielRoseman यह बाकी ऐप है- https://github.com/codingforentrepreneurs/Advancing-the-Blog/tree/master/src/posts। मैंने form.py पर एक नया फ़ील्ड 'userc' जोड़ा है जो आपको उपयोगकर्ता का चयन करने की अनुमति देता है। मैं चाहता हूं कि यह चयनित उपयोगकर्ता टेम्पलेट में प्रदर्शित हो। – uitwaa

+0

यह अभी भी लगभग पर्याप्त जानकारी नहीं है। * कौन सा * देखें? और सबसे महत्वपूर्ण बात यह है कि आपने अपनी "विभिन्न विधियों" में क्या प्रयास किया और क्या हुआ? –

उत्तर

4

आपके पास अब तक forms.py और views.py में कोड अच्छा है। हालांकि, को post_detail.html और post_list.html टेम्पलेट्स में प्रदर्शित करने के लिए, फ़ॉर्म सबमिट होने पर आपको फ़ील्ड को डेटाबेस में सहेजने की आवश्यकता होगी।

  1. कमांड लाइन पर में posts/models.py
  2. भागो python manage.py makemigrations postsPost वर्ग के लिए userc = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='userc', default=1) जोड़ें और फिर python manage.py migrate (आप सुनिश्चित करते हुए ':

    एक तरह से यह करने के लिए Post मॉडल के लिए एक userc क्षेत्र को जोड़ने है src निर्देशिका में पहले)

अब, post_detail.html टेम्पलेट में, आपजोड़ सकते हैं चयनित उपयोगकर्ता को प्रदर्शित करने के लिए।

नोट: related_name='userc'Post के रूप में आवश्यक है पहले से ही उपयोगकर्ता मॉडल के लिए एक विदेशी कुंजी है।

0

एक संदर्भ चर के रूप में उदाहरण के पास।

context = { "form": form, "instance": instance }

instance = None सेट से पहले यह काम करता है, तो request.method पोस्ट नहीं है बनाने के लिए। टेम्पलेट केवल वेरिएबल्स तक पहुंच सकते हैं जो दृश्य में संदर्भ के रूप में पारित होते हैं। तो संदर्भ में उदाहरण उत्तीर्ण करने से आप {{instance.userc}} का उपयोग कर सकते हैं।

कोडिंगforEntrepenuers एक उत्कृष्ट ट्यूटोरियल है, लेकिन मैं अधिक बारीकी से पालन करने और अपने मूलभूत अधिकारों का पालन करने की अनुशंसा करता हूं।