简体   繁体   中英

Django : Filter ModelChoiceField options based on logged user objects

I have a form that remove a truck information from my database. When it is not a POST, the form displays all the Truck objects that belongs to the logged user:

Model :

class Truck(models.Model):

    truck_name = models.IntegerField()
    last_leave = models.DateField(blank=True, null=True)
    next_leave = models.DateField(blank=True, null=True)
    truck_route = models.CharField(max_length=120, blank=True,null=True)
    user_name = models.CharField(max_length=128)

    def __unicode__(self):
        return str(self.truck_name)

Form :

class RemoveTruck(forms.Form):
    truck = forms.ModelChoiceField(
        label='Trucks',
        empty_label=None,  # No empty label
        required=False,
    )

    def __init__(self, *args, **kwargs):
        request = kwargs.pop('request')
        super(RemoveTruck, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_id = 'id-removetruckform'
        self.helper.form_class = 'blueForms'
        self.helper.form_method = 'post'
        self.helper.form_action = 'submit_survey'
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-lg-2'
        self.helper.field_class = 'col-lg-8'
        self.fields('truck').queryset = Truck.objects.all().filter(user_name=request.user.username)

        self.helper.add_input(Submit('submit', 'Submit'))

        self.helper.layout = Layout(
            Field('truck')
        ) 

View :

...
if request.method == 'POST':
    form_remove_truck_post = RemoveTruck(request.POST, request=None)

    if form_remove_truck_post.is_valid():
        data = form_remove_truck_post.cleaned_data
        truck = data['truck']

        Truck.objects.all().filter(truck_name=truck.truck_name).delete()
        return HttpResponseRedirect('/bucket/')

else:
    form_remove_truck = RemoveTruck(request=request)

The problem is that I keep getting an error :

Exception Type:TypeError

Exception Value: init () takes at least 2 arguments (4 given)

https://docs.djangoproject.com/en/1.8/ref/forms/fields/#modelchoicefield

Docs says:

A single argument is required:queryset

queryset parameter is required as mentioned and can not be left alone upon initiation

You have provided way too more still queryset parameter is not there.

truck = forms.ModelChoiceField(
    label='Trucks',
    empty_label=None,  # No empty label
    required=False,
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM