我試圖讓用戶手動輸入文本字段,如果他們有許可證信息,或讓它自動生成(基於表單信息),如果它的原始內容。在Django中,如何在保存前添加一個新的值給request.POST數據?
我被卡住了,因爲從我的測試(使用打印命令)窗體正確更新與表單中給出的信息如果LicenseTag字段留空。問題是更新的信息沒有被保存在數據庫中。經過研究,這似乎是一個不變性的問題,這就是爲什麼我加了request.POST.copy()
並測試了註釋掉的部分定義mutability=True
。
這裏是我的views.py
def STLupload(request):
if request.method == 'POST':
form = NewUpload(request.POST, request.FILES)
data = request.POST.copy()
if form.is_valid():
#Dis gona need alot of work
firstname = request.user.first_name
lastname = request.user.last_name
displayname = request.user.display_name
email = request.user.email
if (firstname or lastname == "None"):
if displayname == "None":
liscname = email
else:
liscname = '%s %s' % (firstname, lastname)
else:
liscname = displayname
filetitle = request.POST.get(
'Title'
, '')
lisc = '%s %s' % (filetitle, liscname)
if data['LicenseTag'] == "":
'''
mutable = request.POST._mutable
request.POST._mutable = True
request.POST['LicenseTag'] = lisc
request.POST._mutable = mutable
'''
data['LicenseTag'] = lisc
print (request.POST.get(
'LicenseTag'
, ''))
print ("blank")
else:
print (form)
#Save current username
comment = form.save(commit=False)
comment.user = request.user
comment.save()
#Flash success message
messages.add_message(request, messages.SUCCESS, "File uploaded successful")
# Redirect to the document list after POST
return HttpResponseRedirect(reverse_lazy('STLup'))
else:
form = NewUpload() # A empty, unbound form
誰能幫我弄清楚如何保存生成的信息到我的數據庫?
編輯#1
Models.py
from django.db import models
import os
#import django.db.models.deletion
from django.db import models
from django.core.exceptions import ValidationError
from django.core.files.storage import FileSystemStorage
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone
from django.conf import settings
from django.contrib.auth.models import User
# Create your models here.
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return os.path.join('uploads', str(instance.Title), filename)
def validate_file_extension(value):
ext = os.path.splitext(value.name)[1]
valid_extensions = ['.stl','.STL']
if not ext in valid_extensions:
raise ValidationError(u'Please upload a .stl file type only')
def validate_img_extension(value):
ext = os.path.splitext(value.name)[1]
valid_extensions = ['.jpg','.png','.JPG']
if not ext in valid_extensions:
raise ValidationError(u'Please upload a .jpg or .png only')
class UploadedFiles(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, blank=True, null=True)
STL = models.FileField(_('STL Upload'),
upload_to=user_directory_path, validators=[validate_file_extension])
Photo = models.ImageField(_('Photo'),
upload_to=user_directory_path, validators=[validate_img_extension])
Title = models.CharField(_('Title of object'),
max_length=40, blank=False, null=True, unique=False)
Category = models.CharField(_('Category'),
max_length=40, blank=False, null=True, unique=False)
SubCategory = models.CharField(_('SubCategory'),
max_length=40, blank=True, null=True, unique=False)
SubSubCategory = models.CharField(_('*SubSubCategory (optional)'),
max_length=40, blank=True, null=True, unique=False)
FileType = models.BooleanField(_('Local?'),
default=0, unique=False)
Description = models.TextField(_('File Description'),
max_length=200, blank=True, null=True, unique=False)
LicenseTag = models.CharField(_('*License (optional, leave blank for original content)'),
max_length=200, blank=True, null=True, unique=False)
Xdim_mm = models.IntegerField(_('X dimension (mm)'),
default=0)
Ydim_mm = models.IntegerField(_('Y dimension (mm)'),
default=0)
Zdim_mm = models.IntegerField(_('Z dimension (mm)'),
default=0)
pub_date = models.DateTimeField(_('date_joined'), default=timezone.now)
這是我forms.py。
from django import forms
from django.core.validators import MinLengthValidator
from .models import UploadedFiles
class NewUpload(forms.ModelForm):
class Meta:
model = UploadedFiles
fields = ('Title', 'STL','Photo','Description', 'Category', 'SubCategory', 'SubSubCategory', 'LicenseTag')
什麼是您的模型?你的表格是什麼?你爲什麼試圖修改POST?幾乎從不需要那 – e4c5
我已經添加了我的模型和表單。我想要做的就是根據用戶輸入表單數據創建一個數據庫條目。如果還有另一種方式來做到這一點,那麼我如何建議我接受任何其他想法。 – RknRobin