Django:将初始值分配给ModelAdmin子类中表单的字段
我不知道当表单通过管理应用程序呈现给用户时,如何为表单中的字段赋值。我试图做的是向用户呈现一个表单,其中名为user的字段已经赋值,如果可能,该字段已被禁用(无法更改) 以下是我的模型Django:将初始值分配给ModelAdmin子类中表单的字段,django,forms,django-forms,django-admin,Django,Forms,Django Forms,Django Admin,我不知道当表单通过管理应用程序呈现给用户时,如何为表单中的字段赋值。我试图做的是向用户呈现一个表单,其中名为user的字段已经赋值,如果可能,该字段已被禁用(无法更改) 以下是我的模型 class modelStudent(models.Model): class Meta: verbose_name_plural = "Enrolled Students" #Name to display in admin interface user = models.On
class modelStudent(models.Model):
class Meta:
verbose_name_plural = "Enrolled Students" #Name to display in admin interface
user = models.OneToOneField(User, on_delete=models.CASCADE,null=True, blank=True)
school = models.ForeignKey(modelSchool)
first_name = models.CharField(max_length=128, unique=False)
student_email = models.EmailField(unique=True, blank=False)
class modelStudentAdminForm(forms.ModelForm):
class Meta:
model = modelStudent
exclude = ['student_email']
现在这是admin表单的admin类
class modelStudentAdmin(admin.ModelAdmin):
form = modelStudentAdminForm
#Only display students that belong to this user
def get_queryset(self, request):
qs = super(modelStudentAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
else:
# Get the school instance
schoolInstance = modelSchool.objects.get(user=request.user)
qs = modelStudent.objects.filter(school=schoolInstance)
return qs
def get_form(self, request, obj=None, **kwargs):
#modelStudentAdmin.form.initial={"first_name":"JoeJoe"}
return modelStudentAdmin.form
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == 'user':
kwargs['queryset'] = modelStudent.objects.filter(user=request.user)
return super(modelStudentAdmin,self).formfield_for_foreignkey(db_field, request, **kwargs)
在这种情况下,它说
'NoneType' object does not support item assignment
我已尝试为表单字段指定值,但无法执行此操作。
所以我的问题是,如何在表单中将字段标记为只读并指定初始值?我想对user
下拉字段执行此操作,并为first\u name指定一个初始值
更新:
我还实施了上述方法(以限制外键选项)
但是,这不会被调用。您是否已经像这样尝试过?我使用了
def formfield\u作为\u foreignkey
而它没有被调用关于def formfield\u作为\u foreignkey(self,db\u字段,request,**kwargs):
,因为在您的例子中,request
字段填充了None
request=None
。。。也许这就是原因。。
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):