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