簡體   English   中英

我正在嘗試鏈接 Django 中特定用戶帳戶創建的帖子

[英]I'm trying to link the post created by the specific user account in Django

模型.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Customer(models.Model):
    user = models.OneToOneField(User,null=True,blank=True,on_delete=models.CASCADE)
    name = models.CharField(max_length=200,null=True)
##    phone = models.IntegerField(null=True)
    email = models.EmailField(max_length=250)
    profile_pic = models.ImageField(default='default_pic.png',null=True,blank=True)
    date_created = models.DateTimeField(auto_now_add=True,null=True)

    def __str__(self):
        return self.name
    
class Task(models.Model):
    customer = models.ForeignKey(Customer,on_delete=models.CASCADE,null=True)
    title = models.CharField(max_length=200)
    description = models.TextField(null=True,blank=True)
    complete = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['complete']

視圖.py

@login_required(login_url='login')
def taskCreate(request):
    if request.method == 'POST':
        form = TaskForm(request.POST or None)
        if form.is_valid():
            form.instance.customer = request.user
            form.save()
            return redirect('tasks')
    else:
        form = TaskForm()

    context = {'form':form}
    return render(request,'todo_list/task_create.html',context)

錯誤:/create_task/ 處的 ValueError 無法分配“<SimpleLazyObject: <User: Dominic>>”:“Task.customer”必須是“Customer”實例。

我正在嘗試將用戶帳戶中的用戶名鏈接到 model Task.customer 上顯示的用戶名,它代表該用戶創建的帖子。 請問有什么方法可以在 model Task中指定customer嗎? 另外我不了解詳細的錯誤消息,因為我的管理面板已經在客戶 model 中有當前用戶名。 但是,如果我使用request.user.customer用戶名不會顯示,而是返回 None 那么如何解決這個問題?

錯誤來自以下代碼段 form.instance.customer = request.user

request.user 不是 Customer 實例,您可以嘗試從 request.user 中提取信息並從中創建一個 Customer object 然后將其分配回去

我不知道form.instance.customer = request.user但我想我明白你的意思,下面的代碼做同樣的事情

@login_required(login_url='login')
def taskCreate(request):
    if request.method == 'POST':
        form = TaskForm(request.POST or None)
        if form.is_valid():
            t = form.save(commit = False)
            t.customer = request.user  # assigning current user to created task.customer
            t.save()
            return redirect('tasks')
    else:
        form = TaskForm()

    context = {'form':form}
    return render(request,'todo_list/task_create.html',context)

如果代碼仍然不起作用,請嘗試更改您的線路

customer = models.ForeignKey(Customer,on_delete=models.CASCADE,null=True)

customer = models.ForeignKey(User,on_delete=models.CASCADE,null=True)在您的models.py

暫無
暫無

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

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