我正在研究一个应用程序,它可以让用户建立自己的数据库,并且他们可以创建的字段之一是照片字段。我正在使用表单模型,并且在捕获其余数据的同时,它不会尝试抓取文件。Django文件没有上传
我有文件上传在网站上的其他地方工作,如果我在管理面板上手动上传文件,它显示得很好,但表单本身不会抓取文件。
在我的模板,我有:
<form action="/orgs/{{org.id}}/db/{{db.unique_id}}/rows/add/" method="post" enctype="multipart/form-data">
{% csrf_token %}
...
{% elif column.field_type = 23 %}
{{form.photofield}}
{% endif %}
</form>
在我的模型:
from django.db import models
def get_upload_file_name(instance, filename):
return settings.UPLOAD_FILE_PATTERN % (str(time()).replace('.','_'), filename)
class DbField(models.Model):
...
photofield = models.FileField(upload_to=get_upload_file_name, null=True, blank=True)
在我的形式:
from django import forms
from byodb.models import DbField
class DbFieldForm(forms.ModelForm):
class Meta:
model = DbField
fields = ('photofield',)
widgets = {'photofield': forms.FileInput()}
,并在我的观点:
def org_database_add_row(request, organization_id=1, db_id=1):
if request.POST:
if request.POST.get(str(column.unique_id)):
if column.field_type == 23:
form = DbFieldForm(request.POST, request.FILES)
if form.is_valid():
f = form.save(commit=False)
...
f.save()
对列/行的任何混淆感到抱歉,它只是放置该字段的数据。如果你需要更多的细节,那么我可以添加更多,但在表面上看起来像所有东西都应该工作...
另外,我一直试图让它以另一种方式工作,避免使用表格,以便文件字段将被命名为与我的列相同。
在这种情况下,在我的模板记载:
<input type="field" name="{{column.unique_id}}" id="photofield" />
,并在我的看法记载:
elif column.field_type == 23:
DbField.objects.create(row=row, column=column, unique_id=column.unique_id, creator=request.user, last_editor=request.user, field_type=column.field_type, photofield=request.FILES[str(column.unique_id)])
但是它同样的问题,它会创建场就好了,但它不会尝试抓取文件。我不知道为什么它只能在这里失败,因为这在网站上的其他地方都适用。