簡體   English   中英

Django 如何保存用戶 Model?

[英]Django how to save User Model?

又是美好的一天,所以我有一個表單,用戶可以添加多個標題。 每次提交都會創建一個新的 object,其中包括書面標題和編寫它的用戶(提交表單)。

我試過了,但我不知道在 NewTitle.objects.create(title=title, ...) 中添加什么

\views.py

def title_view(request):

    try:
        profile = request.user.newtitle
    except NewTitle.DoesNotExist:
        profile = NewTitle(user=request.user)

    if request.method == 'POST':
        form = NewTitleForm(request.POST, instance=profile)
        if form.is_valid():
            title = form.cleaned_data["title"]
            NewTitle.objects.create(title=title) #in the () I have to add the user= aswell
            return redirect('/another')
    else:
        form = NewTitleForm(instance=profile)
        return render(request, 'test.html', {'form': form, 'profile': profile})

\模型.py

class NewTitle(models.Model):
    user = models.OneToOneField(
        User, default=None, null=True, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)

我正在使用基本用戶 model。 目前,用戶可以提交表單,新的 object 將僅使用給定的標題創建,但沒有編寫它的用戶,因為我只是添加了 title=title 而不是 user=...

有任何想法嗎?

如果您想為該用戶更新現有的NewTitle ,或者如果不存在這樣的項目,則創建一個新的,您可以.save() form ,因此:

from django.contrib.auth.decorators import login_required

@login_required
def title_view(request):
    try:
        profile = request.user.newtitle
    except NewTitle.DoesNotExist:
        profile = NewTitle(user=request.user)

    if request.method == 'POST':
        form = NewTitleForm(request.POST, instance=profile)
        if form.is_valid():
            form.save()
            return redirect('/another')
    else:
        form = NewTitleForm(instance=profile)
    return render(request, 'test.html', {'form': form, 'profile': profile})

您還應該識別return render(…)部分,以便如果表單失敗,您可以使用錯誤消息重新呈現表單。

如果你想每次都創建一個新的,你不能用OneToOneField來做到這一點: OneToOneField是一個具有unique=TrueForeignKey :這意味着用戶最多有一個引用該用戶的NewTitle object。 如果您希望能夠構建多個,則可以使用ForeignKey

from django.conf import settings
from django.contrib.auth.decorators import login_required

@login_required
class NewTitle(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        default=None,
        null=True,
        on_delete=models.CASCADE
    )
    title = models.CharField(max_length=200)

然后視圖看起來像:

def title_view(request):
    if request.method == 'POST':
        form = NewTitleForm(request.POST, instance=NewTitle(user=request.user))
        if form.is_valid():
            form.save()
            return redirect('/another')
    else:
        form = NewTitleForm()
    return render(request, 'test.html', {'form': form})

但是您當然不能獲取User .newtitle的 .newtitle,因為可以有零個、一個或多個。


注意:通常使用settings.AUTH_USER_MODEL [Django-doc]引用用戶 model 比直接使用User model [Django-doc] 更好 有關更多信息,您可以查看參考文檔的User model部分


注意:您可以使用@login_required裝飾器 [Django-doc]將視圖限制為經過身份驗證的用戶的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM