django - 在数据库“NoneType”对象中保存照片时出错,没有属性“用户”
问题描述
我有一个带有 Usuario 的模型,其中的配置文件照片可以完美地保存在数据库中,因此为了能够像画廊一样添加更多图像,我创建了另一个名为 Gallery 的模型,我复制了已经存在的相同规范在模型 Usuario 中工作,但是他没有将照片保存在数据库中,我不知道我哪里出错了。我很感激任何帮助。我需要 Gallery 模型来接收外部 Usuario 密钥
错误:“usuario_id_id”列中 /gallery-novo/ 空值的 IntegrityError 违反了非空约束 详细信息:失败行包含 (3, IMG_20180622_101716179_BURST006.jpg, eu e meu amor, null)。
视图.py
def gallery(request):
gallery = Gallery.objects.all()
form = GalleryForm()
data = {'gallery': gallery, 'form': form}
return render(request, 'gallery.html', data)
def gallery_novo(request):
if request.method == 'POST':
form = GalleryForm(request.POST, request.FILES)
if form.is_valid():
form.save(user=request.user)
return redirect('sistema_perfil')
else:
form = GalleryForm
return render(request, 'gallery.html', {'form': form})
模型.py
class Gallery(models.Model):
gallery = StdImageField( blank=False, variations={
'large': (600, 400),
'thumbnail': (100, 100, True),
'medium': (300, 200),
})
titulo = models.CharField(max_length=50, blank=False)
usuario_id = models.ForeignKey(User, on_delete=models.CASCADE, blank=False)
表格.py
class GalleryForm(forms.ModelForm):
gallery = forms.FileField(
widget=forms.ClearableFileInput(attrs={'multiple': 'True'}))
titulo = forms.CharField()
class Meta:
model = Gallery
fields = ( 'gallery', 'titulo')
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
return super(GalleryForm, self).__init__(*args, **kwargs)
def save(self, commit=True, user=None):
form = super(GalleryForm, self).save(commit=False)
form.usario_id = user
if commit:
form.save()
return form
画廊.html
{%extends 'bases/base.html' %}
{% load static %}
{% load bootstrap %}
{% load widget_tweaks %}
{% load crispy_forms_tags %}
{% block main %}
<div class="card text-white bg-primary">
<div class="card-header"><p class="card-text">
<small class="text-muted">
<a href="{% url 'sistema_index' %}" class="text-white ">Home /</a>
<a class="text-white">Cadastro</a>
</small></a></p> Cadastro de Usúario
</div>
<div class="card title ">
<div class="card-body text-secondary">
<form class="exampleone" action="{% url 'sistema_gallery_novo' %}" method="POST" enctype="multipart/form-data" id="form" name="form" validate >
{% csrf_token %}
<div class="form-row">
<div class="form-group col-md-4">
{{ form.gallery | as_crispy_field }}
</div>
<div class="form-group col-md-4">
{{ form.titulo | as_crispy_field }}
</div>
<div class="form-group col-md-4">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block">Cadastrar</button>
</form>
</div>
</div>
</div>
{% endblock %}
{% block rightcol %}
{% include 'bases/rightcol.html' %}
{% endblock %}
{% block footer %}
{% include 'bases/footer.html' %}
{% endblock %}
网址.py
url(r'gallery/$', gallery, name='sistema_gallery'),
url(r'gallery-novo/$', gallery_novo, name='sistema_gallery_novo'),
解决方案
在我看来,您正在重新发明轮子,django 正确的方法是使用commit=False
保存方法:
def gallery_novo(request):
if request.method == 'POST':
form = GalleryForm(request.POST, request.FILES)
if form.is_valid():
my_novo_gallery = form.save(commit=False) #save no commit
my_novo_gallery.user=request.user #set user
my_novo_gallery.save() #save to db
return redirect('sistema_perfil')
推荐阅读
- python - FileNotFoundError:[Errno 2] 没有这样的文件或目录:'fluidsynth':'fluidsynth'
- algorithm - 多项式函数的复杂度是什么意思?
- java - 有人还在用Java吗?请问这个可以翻译吗?
- extjs - 如何从按钮单击重定向到另一个视图(ExtJS 6.2)
- javascript - 如何检查变量是否未定义与在javascript中未声明?
- ios - 以编程方式制作圆形按钮
- mysql - MySQL 隔离级别可重复读取和更新中的原子增量
- discord - 尝试为我的 Discord Bot 发出随机命令
- swift - 具有可变参数属性的 Swift 协议
- reactjs - 如何使用 Jest Enzyme 测试 Material-ui RadioGroup 按钮更改