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