django-forms - Easy - 过滤请求用户 ModelForm 选择
问题描述
我试图从数据库中只获取当前登录用户的数据,而不是所有数据。
有两个模型,一个坎波斯模型,可以有许多Lotes模型。每个“Campos”和“Lote”都来自一个用户。
当我发布 Lote 时,模板必须为 request.user 而不是所有数据库过滤“Campos”的选择。
这是代码
模型.py
class Campos (models.Model):
name = models.CharField(max_length=30)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Lote (models.Model):
name = models.CharField(max_length=30)
user = models.ForeignKey(User, on_delete= models.CASCADE)
has = models.PositiveIntegerField()
campo = models.ForeignKey(Campos, on_delete=models.CASCADE)
def __str__(self):
return self.name
** 在 Fomrs.py 中我无法查询,它不起作用。只是不能过滤模板中的选择**
-
def init (self, user, *args, **kwargs):
-
超级(LoteForm,自我)。初始化(*args, **kwargs)
-
self.fields['campo'].queryset = Campos.objects.filter(user=user)
表格.py
class LoteForm (forms.ModelForm):
class Meta:
model = Lote
fields = [ 'campo','name','has']
labels = {
'campo': _('campo'),
'name': _('Lote'),
'has': _('Hectareas'),
}
def __init__(self, user, *args, **kwargs):
super(LoteForm, self).__init__(*args, **kwargs)
self.fields['campo'].queryset = Campos.objects.filter(user=user)
视图.py
def campos(request):
...
if request.method =='POST' and 'btn2' in request.POST:
form_lote = LoteForm(user=request.user, request.POST)
if form_lote.is_valid():
Lote = form_lote.save(commit=False)
Lote.user = request.user
form_lote.save()
form_lote = LoteForm()
return redirect('reporte')
else:
...
form_lote = LoteForm(user=request.user)
return render (request, 'campos/campos.html',
{"form": form,
"form_lote": form_lote,
})
解决方案
我已经解决了
表格.PY
LoteForm 类(forms.ModelForm):
class Meta:
model = Lote
fields = [ 'campo','name','has']
labels = {
'campo': _('campo'),
'name': _('Lote'),
'has': _('Hectareas'),
}
def __init__(self, user, *args, **kwargs):
super(LoteForm, self).__init__(*args, **kwargs)
self.fields['campo'].queryset = Campos.objects.filter(user=user)
意见.PY
def campos(请求):
if request.method =='POST'and 'btn1'in request.POST:
form = CampoForm(request.POST)
if form.is_valid():
camp = form.save(commit=False)
camp.user = request.user
form.save()
form = CampoForm()
return redirect('reporte')
if request.method =='POST' and 'btn2' in request.POST:
user = request.user
form_lote = LoteForm(user, request.POST )
print(form_lote)
if form_lote.is_valid():
Lote = form_lote.save(commit=False)
Lote.user = request.user
form_lote.save()
form_lote = LoteForm(user)
return redirect('reporte')
else:
form = CampoForm()
user = request.user
form_lote = LoteForm(user)
return render (request, 'campos/campos.html',
{"form": form,
"form_lote": form_lote,
})
推荐阅读
- python - --proto_path 传递空目录名
- node.js - 如何在 express.route() 中路由删除请求?
- python - 应用 try 除了多个属性
- mysql - 使用 mySQL 从选定类别和所有子类别中获取产品
- c - 表达式运算符推广
- javascript - CSS Html Angular中的主页背景图像大小问题
- logging - 使用 fluentd 将日志从一个 GCP 项目发送到另一个 GCP 项目
- javascript - Buefy“表格”组件拖放不起作用 - 甚至在他们的网站上也不起作用
- nearprotocol - NEAR 协议 near-js-api 关于如何使用 API 的文档
- python - 带有 Apply 函数的 ValueError