将对象显示为模板内的选项

时间:2014-08-07 20:21:44

标签: python django django-models django-templates django-views

现在我的代码看起来像这样:

#models.py
class Document(models.Model):
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')

class Course(models.Model):
    course_document = models.ForeignKey(Document,null=True,blank=True)
    subject = models.CharField(max_length = 255)

#forms.py
class DocumentForm(forms.Form):
docfile = forms.FileField(
    label='Select a file',
    help_text='max. 42 megabytes'
)
course = forms.ChoiceField(choices=Course.objects.all(),
                          widget=forms.RadioSelect)

#views.py
def list(request):
# Handle file upload
if request.method == 'POST':
    form = DocumentForm(request.POST, request.FILES)

    if form.is_valid():
        newdoc = Document(docfile = request.FILES['docfile'])
        newdoc.save()

        # Redirect to the document list after POST
        return HttpResponseRedirect(reverse('notes_app.views.list'))
else:
    form = DocumentForm() # A empty, unbound form

# Load documents for the list page
documents = Document.objects.all()

# Render list page with the documents and the form
return render_to_response(
    'notes_app/list.html',
    {'documents': documents, 'form': form},
    context_instance=RequestContext(request)
)

#notes_app/list.html  -- The majority of it anyway

    <form action="{% url "list" %}" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <p>{{ form.non_field_errors }}</p>
        <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>
        <p>
            {{ form.docfile.errors }}
            {{ form.docfile }}
        </p>

我使用一个简单的python脚本将“课程”填充到数据库中,并且我想要的是每次用户上传文件时他们选择“课程”并且该课程与他们上传的文件相关联,所以我的问题是如何将这些课程作为一种选择?对不起,如果这个问题看起来很愚蠢,我是编程的新手,甚至更新的python / django。感谢您的反馈。

2 个答案:

答案 0 :(得分:1)

我仍然没有真正了解你的问题,但这可能会对你有所帮助。 在你的models.py

course_name = ('English', 'Maths',)
from model_utils import Choices
class Course(models.Model):
    course_document = models.ForeignKey(Document,null=True,blank=True)
    name = models.CharField(max_length=255, choices=Choices(*course_name))
    subject = models.CharField(max_length = 255)

这将创建一个用于选择课程的下拉菜单。

答案 1 :(得分:0)

choices应该是CharField,带有一个选择参数。 choices参数的值为tuple,其中包含2个项目。第一个是您在需要时可以访问的值。第二个值是用户看到的。因此,“

class MyForm(forms.Form):
    courses = forms.CharField(max_length=255, choices=(
        ('1', 'First Course'),
        ('2', 'Second Course')
        )
    )

以下是Django Docs:

https://docs.djangoproject.com/en/dev/ref/models/fields/#choices