class Facilites(models.Model):
id = models.CharField(max_length=32, primary_key=True)
name = models.CharField(max_length=128)
class Objects(models.Model):
name = models.CharField(max_length=64)
facilityid = models.ForeignKey(Facilities)
class Admins(models.Model):
user = models.OneToOneField(User)
facilities = models.ManyToManyField(Facilities)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Admins.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
私が望むのは、ユーザー (管理者) がオブジェクトの "facilityid" を Admins.facilities で指定された値にのみ追加または変更できるようにすることです。したがって、ユーザーが UserA という名前で、施設 = ('FacA', 'FacB') を持っている場合、DB に新しいオブジェクトを追加するときに、Object('Random object', 'FacC' のようなものを追加することはできません。 ')
また、既存のオブジェクトを自分が属していない施設に変更することはできません。
オブジェクトを次のようにフィルタリングしました。
def queryset(self, request):
qs = super(ObjectsAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(facitityid__id__in = request.user.get_profile().facilities.all())
そのため、ユーザーは自分の施設に属するオブジェクトのみを見ることができます。しかし、施設からオブジェクトを追加/編集するのを防ぐ方法がわかりません。
編集:
ここで答えを見つけました:https://stackoverflow.com/a/3048563/1421572
この状況では ModelAdmin.formfield_for_foreignkey が正しい答えであることが判明しました: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey