将变量传递给窗体类中的queryset

2024-10-02 16:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用django mptt autocomplete,作为树视图,在模板中显示我的层次结构。你知道吗

fosmotr_techobject = TechObject.objects.order_by('tree_id', 'lft')
    class lookupForm(forms.ModelForm):
        class Meta:
            model = Osmotr
            fields = ('Osmotr_ostanovka', 'Osmotr_techobject', )        
            exclude = ('Osmotr_ostanovka', )
            widgets = {
                'Osmotr_techobject': FancyTreeWidget(queryset=fosmotr_techobject,model=Osmotr),
                'Osmotr_ostanovka': forms.HiddenInput()     
            }

但我需要在小部件中过滤queryset,这就是问题所在。你知道吗

如果我试着在窗体类中设置queryset,它就不起作用了

NameError: name 'fosmotr_techobject' is not defined

当我尝试从函数中获取queryset时,它不起作用

def get_zavod(route_id):
    zzavod = Marshrut.objects.filter(id=route_id).values_list('marshrut_Zavod', flat=True)
    fosmotr_techobject = TechObject.objects.filter(TechObject_zavod__in = zzavod).order_by('tree_id', 'lft')
    return fosmotr_techobject       

class lookupForm(forms.ModelForm):
    class Meta:
        model = Osmotr
        fields = ('Osmotr_ostanovka', 'Osmotr_techobject', )        
        exclude = ('Osmotr_ostanovka', )
        widgets = {
            'Osmotr_techobject': FancyTreeWidget(queryset=get_zavod(route),model=Osmotr),
            'Osmotr_ostanovka': forms.HiddenInput()     }
    def __init__(self, *args, **kwargs):
        route = kwargs.pop('route', None)

我从视图传递路径到init

def lookup_add(request, route_id, stop_id):
    if not request.user.is_authenticated():
        return redirect('/routes/login/')
    else:
        if request.method == "POST":
            form = lookupForm(request.POST)
            if form.is_valid():
                lookup = form.save(commit=False)
                lookup.Osmotr_ostanovka_id = stop_id
                lookup.save()           
                return redirect('/routes/stops/get/' + stop_id + '/') 
        else:
            form = lookupForm(route = route_id)
        return render(request, 'lookup_add.html', {'form': form, 'username': auth.get_user(request)})

同样的错误

  NameError: name 'route' is not defined

我的模型:

class Zavod(models.Model):
    class Meta:
        db_table = "zavod"
    zavod_kod = models.CharField(max_length = 4, primary_key=True)
    zavod_text = models.CharField(max_length = 59)
    def __unicode__(self):
        return self.zavod_text

class Marshrut(models.Model):
    class Meta:
        db_table = "marshrut"
    marshrut_text = models.CharField(max_length = 59)
    marshrut_Zavod = models.ForeignKey(Zavod, null=True)
    def __unicode__(self):
        return self.marshrut_text

class TechObject(MPTTModel):
    class Meta:
        db_table = "techObject"
    class MPTTMeta:
        order_insertion_by = ['TechObject_text']    
    TechObject_SAPid = models.CharField(max_length = 59, primary_key=True)
    TechObject_zavod = models.ForeignKey(Zavod, null=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
    def __unicode__(self):
         return self.TechObject_text

 class Osmotr(models.Model):
    class Meta:
        db_table = "osmotr"
    Osmotr_ostanovka = models.ForeignKey(Ostanovka, null=True)
    Osmotr_techobject = models.ForeignKey(TechObject, null=True)
    def __unicode__(self):
        return str(self.id)

我也尝试过全局var的坏方法,但没有结果。你知道吗


Tags: selfidtruereturnmodelsrequestdefroute