Easy - 过滤请求用户 ModelForm Choices
Easy - Filtering request user ModelForm Choices
我试图从数据库中获取当前登录用户的数据,而不是所有数据。
有两个模型,一个 Campos 模型可以有多个 Lotes 模型。每个“Campos”和“Lote”都来自一个用户。
当我发布 Lote 时,模板必须过滤 request.user 而不是所有数据库的“Campos”选项。
这是代码
model.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):
-
super(LoteForm, self).init(*args, **kwargs)
-
self.fields['campo'].queryset = Campos.objects.filter(user=user)
forms.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)
views.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,
})
TAKE A LOOK AT THIS PICTURE
我解决了
FORMS.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)
VIEWS.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,
})
我试图从数据库中获取当前登录用户的数据,而不是所有数据。
有两个模型,一个 Campos 模型可以有多个 Lotes 模型。每个“Campos”和“Lote”都来自一个用户。
当我发布 Lote 时,模板必须过滤 request.user 而不是所有数据库的“Campos”选项。
这是代码
model.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):
-
super(LoteForm, self).init(*args, **kwargs)
-
self.fields['campo'].queryset = Campos.objects.filter(user=user)
forms.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)
views.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,
})
TAKE A LOOK AT THIS PICTURE
我解决了
FORMS.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)
VIEWS.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,
})