美好的一天 Stackoverflow,用戶應該能夠添加多個標題,而不是總是覆寫一個添加的標題。
\\views.py
def edit_profile(request):
try:
profile = request.user.userprofile
except UserProfile.DoesNotExist:
profile = UserProfile(user=request.user)
if request.method == 'POST':
form = UserProfileForm(request.POST, instance=profile)
if form.is_valid():
form.save()
return redirect('/test')
else:
form = UserProfileForm(instance=profile)
return render(request, 'forms.html', {'form': form, 'profile': profile})
\\models.py
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
title = models.CharField(max_length=1024)
def __str__(self):
return str(self.title)
\\forms.py
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('title',)
然后用戶在網站上有一個表單,他可以在其中添加特定的標題。
然而,直到現在,每次用戶填寫標題表單時,資料庫中的值都會被覆寫。應該是這樣:當在表單中添加新標題時,應該簡單地將其添加到其中。
最后,我應該有可能在 HTML 模板中使用 For 回圈來顯示相應用戶的所有添加標題。
你知道怎么做嗎?
uj5u.com熱心網友回復:
如果您使用的是關系資料庫,則單個欄位并不真正支持此功能。不過,如果您真的愿意,您可以使用 JSON 欄位來完成這項作業。
但是,為標題使用單獨的表格可能是一個更好的主意。
為此,您需要創建一個新Title物件,例如:
class Title(models.Model):
然后,使用以下方法創建多對一關系ForeignKey:
class Title(models.Model):
text = models.CharField(max_length=1024)
user_profile = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
on_delete 方法是必需的。如果 UserProfile 被洗掉,這個特定的將洗掉與 UserProfile 關聯的所有 Titles。
現在,如果您想將標題物件與 UserProfile 相關聯,您可以這樣做:
profile = UserProfile(user=request.user)
title = Title.objects.create(text='My Very First Title', user_profile=profile)
有關 Django 中多對一關系的更多資訊:https ://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_one/
uj5u.com熱心網友回復:
您可以創建新模型并使用 ForeignKey 欄位分配新模型。
模型.py:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
def __str__(self):
return ', '.join([title for title in self.titles.all()])
class UserTitle(models.Model):
title = models.CharField(max_length=1024)
userprofile = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='titles')
def __str__(self):
return self.title
視圖.py:
def edit_profile(request):
...
if request.method == 'POST':
...
if form.is_valid():
form.instance.userprofile = request.user.userprofile
form.save()
return redirect('/test')
...
管理員.py:
from django.contrib import admin
from your_app.models import UserProfile
class UserProfileAdmin(admin.ModelAdmin):
list_display = ['id', 'user', '__str__']
admin.site.register(UserProfile, UserProfileAdmin)
設定.py:
INSTALLED_APPS = [
...
'your_app',
...
在模板中,要制作 for 回圈,只需使用:
{% for title in user.userprofile.titles.all %}
{{ title }}
{% endfor %}
或者如果您只需要單個字串中的用戶標題:
{{ user.userprofile }}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417359.html
標籤:
