我在注册表单中创建了一个字段,询问用户到linkedin个人资料的链接。
我创建了一个页面,返回所有用户(指导者用户)的列表,并注意到我无法访问linkedin链接。我不确定是因为我没有保存链接,还是我没有正确地访问它。
这就是我在models.py上的文章
class User(AbstractUser):
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
...
class Mentor(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True)
linkedin = models.URLField(max_length=200,null=True,blank=True)
def __str__(self):
return "Profile of user {}".format(self.user.username)
@receiver(post_save,sender=User)
def create_or_update(sender, instance, created, **kwargs):
if created:
post_save.connect(create_or_update, sender=User)
forms.py
class TeacherSignUpForm(UserCreationForm):
email = forms.EmailField(max_length=100)
first_name = forms.CharField(max_length=100)
last_name = forms.CharField(max_length=100)
linkedin = forms.URLField(max_length=200)
class Meta(UserCreationForm.Meta):
model = User
fields = ('email', 'username', 'first_name', 'last_name')
def save(self, commit=True):
self.instance.is_teacher = True
user = super(UserCreationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
mentor = Mentor.objects.get_or_create(
user=user,
linkedin=self.cleaned_data['linkedin']
)
return user
#basic form
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
views.py (teachers.py)
class TeacherSignUpView(CreateView):
model = User
form_class = TeacherSignUpForm
template_name = 'registration/signup_form.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'teacher'
return super().get_context_data(**kwargs)
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('teachers:app-instructor-dashboard')
students.py (视图)
#get list of mentors
def mentor_list(request):
mentors = User.objects.filter(is_teacher=True).select_related('mentor')
template_name = 'classroom/students/mentor_list.html'
context = {'mentors': mentors}
return render(request, template_name, context)
生成导师列表的html:
<ul id="menu-header-menu">
{% for user in mentors %}
<li><a href="{{ user.mentor.linkedin }}">{{ user.first_name }} {{ user.last_name }}</a></li>
{% endfor %}
</ul>
从这个列表中,我只得到用户的名字和姓氏,但无法获得他们的linkedin配置文件
发布于 2020-01-17 04:04:15
您在这一行中使用了mentor ( mentors = User.objects.filter(is_teacher=True).select_related('mentor')
),但没有在任何地方定义 not 。
表与这一行连接:
user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True)
添加related_name .
user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True, related_name='mentor')
然后移民和迁移(希望你是熟悉的)。其他一切都很好。
另外,打印这个来验证。
def mentor_list(request):
mentors = User.objects.filter(is_teacher=True).select_related('mentor')
# Edited, remember this is just for checking. this is not required
for user in mentors:
try:
print(user.mentor.linkedin)
except:
pass
template_name = 'classroom/students/mentor_list.html'
context = {'mentors': mentors}
return render(request, template_name, context)
https://stackoverflow.com/questions/59784935
复制相似问题