kopia lustrzana https://github.com/jedie/PyInventory
37 wiersze
1.2 KiB
Python
37 wiersze
1.2 KiB
Python
from django import forms
|
|
from django.core.exceptions import FieldDoesNotExist
|
|
|
|
from inventory.request_dict import get_request_dict
|
|
|
|
|
|
class OnlyUserRelationsModelForm(forms.ModelForm):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
# Filter all related fields that has a "user" attribute for the current user
|
|
# e.g.:
|
|
# The user should only select his own "location" and "items"
|
|
|
|
user = get_request_dict()['user'] # get current user via threading.local()
|
|
for formfield in self.fields.values():
|
|
if not hasattr(formfield, 'queryset'):
|
|
continue
|
|
|
|
queryset = formfield.queryset
|
|
opts = queryset.model._meta
|
|
try:
|
|
opts.get_field('user')
|
|
except FieldDoesNotExist:
|
|
continue
|
|
|
|
formfield.queryset = queryset.filter(user=user)
|
|
|
|
def save(self, commit=True):
|
|
instance = super().save(commit=False)
|
|
if instance.user_id is None:
|
|
user = get_request_dict()['user'] # get current user via threading.local()
|
|
instance.user_id = user.pk
|
|
|
|
instance.save()
|
|
return instance
|