0
에 대해 서로 다른 인라인 나는이 모델 장고 다른 사용자
class Office(models.Model):
name = models.CharField(max_length=255)
class User(models.Model):
name = models.CharField(max_length=255)
status = models.SmallIntegerField()
office = models.ForeignKey(Office, on_delete=models.SET_NULL, null=True)
class Inspection(models.Model):
place = models.CharField(max_length=255, null=True, blank=True)
class Jobs(models.Model):
inspection = models.ForeignKey(Inspection, on_delete=models.CASCADE)
inspector = models.ForeignKey(User, on_delete=models.SET_NULL)
cost = models.DecimalField(max_digits=20, decimal_places=2)
내가 다른 사용자가있을 수 있습니다.
일반 사용자는 동일한 사무실의 Inspectors
으로 만 Jobs
을 만들고 볼 수 있습니다.
관리자는 모든 사용자를 Inspectors
에 넣고 모두 Jobs
을 볼 수 있습니다.
나는 같은 사무실에서 사용자의 작업 목록을 필터링 할 수 있습니다
class JobAdmin(admin.StackedInline):
model = Job
extra = 0
def get_queryset(self, request):
qs = super(JobAdmin, self).get_queryset(request)
if request.user.status in [1]:
qs = qs.filter(inspector__office=request.user.office)
return qs
class InspectionAdmin(ModelAdmin):
list_display = ['place']
inlines = [JobAdmin]
을하지만 어떻게 편집을 위해 추가 필터를 추가 할 수 있습니까?
가 인라인 형태 아니었다면 나는 이런 식으로 할 것이다 :
class JobAdminForm(ModelForm):
def __init__(self, *args, **kwargs):
super(JobAdminForm, self).__init__(*args, **kwargs)
if self.user.status == 1: #common user
self.fields['inspector'].queryset = Inspector.objects.filter(office=self.user.office)
class Meta:
model = Jobs
fields = '__all__'
class JobAdmin(ModelAdmin):
form = JobAdminForm
def get_form(self, request, obj=None, **kwargs):
form = super(JobAdmin, self).get_form(request, **kwargs)
form.user = request.user
return form
고마워요. it works –
@MaslovAndrey이 경우, 해결책으로 내 대답을 표시 할 수 있습니까? –