Параметр передачи Django в Queryset фильтрации объектов формы - PullRequest
0 голосов
/ 25 сентября 2019

сценарий;

Мы получили поле с полями, а внутри формы есть поле со списком, оно заполняется элементами.

У нас есть арендатор, и каждый пользователь получил TenantID, поэтому, когда пользователь A1 (tenantid 1) вызывает форму создания, нам нужно отфильтровать этот комбинированный список, чтобы отфильтровать только пользовательские элементы A1 с использованием фильтрации запросов.

Аналогично для других арендаторов.

Как передать этот динамический тенантид.

Кстати, для каждого пользователя tenantid, хранящегося в абстрагированном классе django core USER - добавлено новое поле tenantid.Любой совет, который я открыт для этого, спасибо за ваше внимание.

Состояние: Решение пока не принято

Forms.py

class ItemForm(forms.ModelForm):
    class Meta:
        model = Items
        fields = ('id', 'item', 'start', 'end')
        widgets = {
            'start': DateTimePickerInput(format='%Y-%m-%d %H:%M'),
            'end': DateTimePickerInput(format='%Y-%m-%d %H:%M'),
        }

    def __init__(self, *args, **kwargs):
        super(ItemForm, self).__init__(*args, **kwargs)
        self.fields['item'].queryset = Items.objects.filter(tenantid=int(User.tenantid))

views.py

@login_required()
def create_item_record(request):
    if request.method == 'POST':
        form = ItemForm(request.POST)
    if request.method == 'GET':
        tenantidX = request.user.tenantid
        form = ItemForm()
    return save_item_form(request, form, 'items_create_partial.html')

1 Ответ

2 голосов
/ 25 сентября 2019

Просто передайте пользователя из запроса в вашу форму:

class ItemForm(forms.ModelForm):
    class Meta:
        model = Items
        fields = ('id', 'item', 'start', 'end')
        widgets = {
            'start': DateTimePickerInput(format='%Y-%m-%d %H:%M'),
            'end': DateTimePickerInput(format='%Y-%m-%d %H:%M'),
        }

    def __init__(self, user, *args, **kwargs):
        super(ItemForm, self).__init__(*args, **kwargs)
        self.fields['item'].queryset = Items.objects.filter(tenantid=int(user.tenantid))

@login_required()
def create_item_record(request):
    if request.method == 'POST':
        form = ItemForm(request.user, request.POST)
    if request.method == 'GET':
        tenantidX = request.user.tenantid
        form = ItemForm(request.user)
    return save_item_form(request, form, 'items_create_partial.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...