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')django admin在某些字段中添加固定值的数据
另外,他不应该能够修改现有对象到他不属于的设施。
我已筛选的对象有:
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
设施清单在设施表中的分贝。每个管理员应该能够属于任何和所有设施,但是只能编辑和添加属于他的设施的对象。 每个对象只属于一个设施。 我想在django管理界面。 – marvin