0
CreateView
양식을 표시 할 때 로그인 한 사용자의 데이터를 사용하여 foreignKey 값을 채우고 싶습니다. 나는 이것을 읽기 전용으로 원한다.읽기 전용 foreignKey 값을 가진 Django CreateView 폼을 채우십시오
내 모델은 다음과 같습니다
# User profile info
class Profile(models.Model):
# Relationship Fields
user = models.OneToOneField(User, on_delete=models.CASCADE)
school = models.ForeignKey('eduly.School', default=1)
notes = models.TextField(max_length=500, blank=True)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
class School(models.Model):
# Fields
name = models.CharField(max_length=255)
address = models.TextField(max_length=500, blank=True)
email = models.CharField(max_length=30)
phone = models.CharField(max_length=15)
contactName = models.CharField(max_length=30)
slug = extension_fields.AutoSlugField(populate_from='name', blank=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
class Meta:
ordering = ('-created',)
def __unicode__(self):
return u'%s' % self.slug
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('eduly_school_detail', args=(self.slug,))
def get_update_url(self):
return reverse('eduly_school_update', args=(self.slug,))
class Teacher(models.Model):
SCHOOL_ADMIN = 0
CLASS_ADMIN = 1
TASK_ADMIN = 2
ROLES = {
(SCHOOL_ADMIN, "School administrator"),
(CLASS_ADMIN, "Class administrator"),
(TASK_ADMIN, "Task administrator")
}
# Fields
name = models.CharField(max_length=255)
slug = extension_fields.AutoSlugField(populate_from='name', blank=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
email = models.CharField(max_length=30)
roles = models.IntegerField("Role", choices=ROLES, default=1)
# Relationship Fields
school = models.ForeignKey('eduly.School',)
class Meta:
ordering = ('-created',)
def __str__(self):
return self.name
def __unicode__(self):
return u'%s' % self.slug
def get_absolute_url(self):
return reverse('eduly_teacher_detail', args=(self.slug,))
def get_update_url(self):
return reverse('eduly_teacher_update', args=(self.slug,))
내 의견은 : 내가 읽기 전용 필드 self.request.user.profile.school
에 Teacher.school 외래 키 필드를 설정할 TeacherCreateView
를 들어
@method_decorator(login_required, name='dispatch')
class TeacherListView(ListView):
model = Teacher
def get_queryset(self):
return Teacher.objects.filter(school=self.request.user.profile.school)
@method_decorator(login_required, name='dispatch')
class TeacherCreateView(CreateView):
model = Teacher
form_class = TeacherForm
.
이렇게하면 도움이 될 것입니다 https://stackoverflow.com/questions/32273135/how-to-override-form-field-in-createview – itzMEonTV
어떻게 대답이 foreignKey 필드 설정과 관련되어 있는지 잘 모르겠습니다. 읽기 전용으로 만듭니 까? –
왜 읽기 전용으로 만들고 싶습니까? 사용자가 수정할 수 없으면 왜 표시하지 않는 것입니까? 보기로 설정하기 만하면됩니다 (예 : https://docs.djangoproject.com/en/1.11/topics/class-based-views/generic-editing/#models-and-request-user). 그 일을하는 방법에 대해서. –