Django

2009-06-26 2 views
11

में एक अनुकूलन योग्य उपयोगकर्ता सर्वेक्षण कैसे करें मैं एक ऐसी कंपनी के लिए एक प्रणाली बना रहा हूं जिसमें अन्य चीजों के साथ विभिन्न चीजों के बारे में संतोषजनक स्तर के बारे में जानकारी होनी चाहिए, मैंने इसे निश्चित प्रश्नों और उत्तरों के साथ एक निश्चित मॉडल का उपयोग करके ठीक काम किया है , लेकिन मुझे यकीन है कि उन्हें प्रश्नों को बदलने या जोड़ने की आवश्यकता होगी।Django

इसलिए मैं एक ऐसी प्रणाली बनाना चाहता हूं जहां उपयोगकर्ता कस्टम मूल्यांकन स्कीमा बना सकें जिसमें उनके द्वारा परिभाषित कस्टम प्रश्न शामिल हों। मैं इस तरह के डिजाइन के बारे में कैसे जा सकता हूं?

अभी अपने मॉडल यह है, लेकिन गलत:

RATING_CHOICES = ((0, u"Good"), (1, u"Bad"), (2, u"Dunno"),) 

class EvaluationScheme(models.Model): 
    title = models.CharField(max_length=200) 

class Evaluation(models.Model): 
    doctor = models.CharField(max_length=200) 
    agency = models.CharField(max_length=200) 
    scheme = models.ForeignKey(EvaluationScheme) 

class EvaluationQuestion(models.Model): 
    question = models.CharField(max_length=200) 
    evaluation = models.ForeignKey(EvaluationScheme) 

    def __unicode__(self): 
     return self.question 

class EvaluationAnswer(models.Model): 
    evaluation = models.ForeignKey(Evaluation) 
    question = models.ForeignKey(EvaluationQuestion) 
    answer = models.SmallIntegerField(choices=RATING_CHOICES) 

यह, जो मैं चाहता की तरह है, सिवाय इसके कि EvaluationScheme बेकार है, क्योंकि आप अभी भी सभी सवालों चुना करने के लिए है और अपने आप का जवाब देता - यह करता है पसंद की स्कीमा से संबंधित प्रश्नों की एक सूची प्रदर्शित न करें।

उत्तर

5

मुझे लगता है कि आपके मॉडल ठीक हैं। मैंने Djalu व्यवस्थापक का मूल्यांकन मूल्यांकन मूल्यांकन के साथ एक मूल्यांकन मूल्यांकन किया, फिर मैंने एक मूल्यांकन बनाया और मैं इसके सवालों का जवाब देने में सक्षम था। यहाँ कोड मैं अपने मॉडल के साथ जाने के लिए प्रयोग किया जाता है:

# forms.py: 
from django.forms.models import inlineformset_factory 
import models 

AnswerFormSet = inlineformset_factory(models.Evaluation, 
     models.EvaluationAnswer, exclude=('question',), 
     extra=0, can_delete=False) 

# views.py 
from django.http import HttpResponse 
from django.shortcuts import render_to_response, get_object_or_404 
import models, forms 

def prepare_blank_answers(evaluation): 
    for question in evaluation.scheme.evaluationquestion_set.all(): 
     answer = models.EvaluationAnswer(evaluation=evaluation, 
             question=question) 
     answer.save() 

def answer_form(request, id): 
    evaluation = get_object_or_404(models.Evaluation, id=id) 
    if len(evaluation.evaluationanswer_set.all()) == 0: 
     prepare_blank_answers(evaluation) 
    if request.method == 'POST': 
     formset = forms.AnswerFormSet(request.POST, instance=evaluation) 
     if formset.is_valid(): 
      formset.save() 
      return HttpResponse('Thank you!') 
    else: 
     formset = forms.AnswerFormSet(instance=evaluation) 
    return render_to_response('answer_form.html', 
      {'formset':formset, 'evaluation':evaluation}) 


# answer_form.html: 
<html><head></head><body> 
    Doctor: {{ evaluation.doctor }} <br> 
    Agency: {{ evaluation.agency }} 
    <form method="POST"> 
    {{ formset.management_form }} 
    <table> 
     {% for form in formset.forms %} 
     <tr><th colspan="2">{{ form.instance.question }}</th></tr> 
     {{ form }} 
     {% endfor %} 
    </table> 
    <input type="submit"> 
    </form> 
</body></html> 
+0

आपके योगदान के लिए धन्यवाद - लेकिन समस्या यह है कि जब आप एक से अधिक मूल्यांकनशेकमे जोड़ते हैं - तो आप केवल बनाई गई योजना से संबंधित प्रश्नों के सभी प्रश्नों का उत्तर देने में सक्षम नहीं हैं। प्रशासन इंटरफ़ेस का उपयोग करते समय कम से कम यही समस्या है। लेकिन शायद मुझे उन रूपों पर कुछ AJAX करने की जरूरत है। –

+0

यदि आप यहां मेरे कोड का उपयोग करते हैं तो आपको उस समस्या का सामना नहीं करना चाहिए। मेरे कोड में मुख्य पंक्ति "मूल्यांकन में प्रश्न के लिए है .cheme.evaluationquestion_set.all()" जो इस मूल्यांकन के लिए योजना से संबंधित केवल उन प्रश्नों को पकड़ती है। यदि आपके कोड में ऐसी कोई पंक्ति नहीं है, तो आपको समस्या की रिपोर्ट होगी। – krubo

1

नहीं Django विशेषज्ञ ताकि आप एक अधिक अनुभव व्यक्ति के लिए प्रतीक्षा करने के जवाब देने की इच्छा हो सकती है, लेकिन आप की तरह कुछ की कोशिश कर सकते:

EvaluationQuestions.objects.filter(evaluationscheme__title="myscheme").select_related() 

भी अन्य तरह के आसपास संबंधों डाल सकता है, निर्भर करता है कि आप की जरूरत है डेटा तक पहुंचें।

class EvaluationScheme(models.Model): 
    title = models.CharField(max_length=200) 
    evaluations = models.ManyToMany(Evaluation) 
    questions = models.ManyToMany(EvaluationQuestions) 
3

Django-crowdsourcing Django-सर्वेक्षण कि सक्रिय रूप से Django 1.2+ 2012 के रूप में बनाए रखा और लक्षित करता है की एक कांटा है।