【问题标题】:Easy - Filtering request user ModelForm ChoicesEasy - 过滤请求用户 ModelForm 选择
【发布时间】:2020-11-04 19:44:51
【问题描述】:

我试图从数据库中仅获取当前登录用户的数据,而不是所有数据。

有两个模型,一个 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

【问题讨论】:

    标签: django-forms django-queryset django-filter modelform


    【解决方案1】:

    我已经解决了

    FORMS.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)
    

    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,
                })
    

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 1970-01-01
      • 2010-09-22
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多