我正在使用 django 在论坛上工作,我从我拥有的模型类访问用户全名和简历时遇到问题。 我访问user.username 或 user.email 没有问题,但不是来自 Author 类。
这是来自论坛应用程序中的 models.py
User = get_user_model()
class Author(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
fullname = models.CharField(max_length=40, blank=True)
slug = slug = models.SlugField(max_length=400, unique=True, blank=True)
bio = HTMLField()
points = models.IntegerField(default=0)
profile_pic = ResizedImageField(size=[50, 80], quality=100, upload_to="authors", default=None, null=True, blank=True)
def __str__(self):
return self.fullname
我的表单在用户应用程序中,我有一个个人资料更新站点,表单如下所示
from forums.models import Author
class UpdateForm(forms.ModelForm):
class Meta:
model = Author
fields = ('fullname', 'bio', 'profile_pic')
然后这是一些更新站点,但是没有什么让我可以访问生物或全名,我已经尝试了很多组合。 我在这里迷路了。
{% block content %}
<section class="section" id="about">
<!-- Title -->
<div class="section-heading">
<h3 class="title is-2">Hey {{ user.username }}</h3>
<div class="container">
<p>{{ user.bio }}bio comes here</p>
</div>
</div>
这是来自用户应用程序的 view.py
from .forms import UpdateForm
def update_profile(request):
context = {}
user = request.user
instance = Author.objects.filter(user=user).first()
if request.method == 'POST':
form = UpdateForm(request.POST, request.FILES, instance=user)
if form.is_valid():
form.instance.user = user
form.save()
return redirect('/')
else:
form = UpdateForm(instance=user)
context.update({
'form': form,
'title': 'update_profile',
})
return render(request, 'register/update.html', context)
表单 html
<form method="POST" action="." enctype="multipart/form-data">
{% csrf_token %}
{{form|crispy}}
<hr>
<button class="button is-block is-info is-large is-fullwidth">Update <i class="fa fa-sign-in" aria-hidden="true"></i></button>
</form>
如果我缺少一些关系,请帮助
每次"更新"模型时,视图当前都会创建一个新的Author
记录。我建议首先清理数据库并删除所有作者。
然后,您可以在此处将ForeignKey
转换为OneToOneField
: 这样我们就知道每个用户最多有一个Author
:
from django.conf import settings
class Author(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
# …
现在,我们可以更改视图以在没有此类记录的情况下创建记录,或者更新现有记录(如果有):
from .forms import UpdateForm
def update_profile(request):
context = {}
user = request.user
instance = Author.objects.filter(user=user).first()
if request.method == 'POST':
form = UpdateForm(request.POST, request.FILES, instance=instance)
if form.is_valid():
form.instance.user = user
form.save()
return redirect('/')
else:
form = UpdateForm(instance=instance)
context.update({
'form': form,
'title': 'update_profile',
})
return render(request, 'register/update.html', context)
在模板中,您可以为用户user
呈现相关Author
模型的数据:
{{ user.author.fullname}}
{{ user.author.bio}}