我希望能够将多个图像添加到我的 Scribble 模型中。这就是为什么我将 ScribbleMedia 放入一个单独的模型中,以便我可以将它用作外键,然后使用 django Formset 我希望能够将多个文件添加到一个 Scribble 模型中。
到目前为止,我看到的示例可以让我制作多个 Scribble 模型,但我不确定如何将多个 FileFields 添加到一个 Scribble 中。
这是代码:
模型.py
class Scribble(models.Model):
body = models.TextField()
user = models.ForeignKey(User)
def __unicode__(self):
return u'%s, %s' % (self.user.username, self.media)
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join('scribblemedia/', filename)
class ScribbleMedia(models.Model):
media = models.FileField(upload_to=get_file_path)
scribble=models.ForeignKey(Scribble)
def __unicode__(self):
return self.media
表格.py
class ScribbleSaveForm(forms.Form):
media=forms.FileField(
label=u'add file',
required=False,
widget=forms.FileInput()
)
body=forms.CharField(
label=u'description',
widget=forms.Textarea()
)
视图.py
def scribbler_save_page(request):
if request.method == 'POST':
form = ScribbleSaveForm(request.POST, request.FILES)
if form.is_valid():
#Create or get media.
media, dummy = ScribbleMedia.objects.get_or_create(
media=form.cleaned_data['media']
)
#Create or get media.
scribble, created=Scribble.objects.get_or_create(
user=request.user,
media=media
)
#update scribble body
scribble.body=form.cleaned_data['body']
# Save scribble to database.
scribble.save()
return HttpResponseRedirect (
'/user/%s/' % request.user.username
)
else:
form = ScribbleSaveForm()
variables = RequestContext (request, {
'form': form
})
return render_to_response ('scribble_save.html', variables)
scribble_save.html
{% extends "base.html" %}
{% block title %}Save Scribble {% endblock %}
{% block head %}Save Scribble {% endblock %}
{% block content %}
<form enctype="multipart/form-data" method="post" action=".">
{{ form.as_p }}
<input type="submit" value="save" />
{% csrf_token %}
</form>
{% endblock %}