我正在使用 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>
如果我遺漏了一些關系,請幫忙
uj5u.com熱心網友回復:
每次“更新”模型時,您的視圖當前都會創建一個新 Author記錄。我建議先清理資料庫并洗掉所有作者。
然后您可以將 轉換ForeignKey為OneToOneFieldhere: 這樣我們就知道每個用戶最多有一個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)
在模板中,您可以Author為用戶渲染相關模型的資料user:
{{ user.author.fullname }}
{{ user.author.bio }}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/403608.html
標籤:
上一篇:在不同年份的兩個日期之間選擇條目
