【问题标题】:I'm trying to link the post created by the specific user account in Django我正在尝试链接由 Django 中特定用户帐户创建的帖子
【发布时间】:2021-08-23 16:15:48
【问题描述】:

models.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']

views.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 无法分配“>”:“Task.customer”必须是“Customer”实例。

我正在尝试链接用户帐户中的用户名,以显示在模型 Task.customer 上,该模型代表该用户创建的帖子。请问有什么方法可以在模型Task 中指定customer 吗?此外,我不了解详细的错误消息,因为我的管理面板已经在 Customer 模型中具有当前用户名。但是,如果我使用request.user.customer,用户名不会显示,而是返回 None 那么如何解决这个问题?

【问题讨论】:

  • 具体说明您的问题...问题太多,概率太多。

标签: python django web


【解决方案1】:

错误来自以下sn -p form.instance.customer = request.user

request.user 不是 Customer 实例,您可以尝试从 request.user 中提取信息并从中创建一个 Customer 对象,然后将其分配回去

【讨论】:

    【解决方案2】:

    我不知道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

    【讨论】:

    • 我尝试改成上面的但还是无法返回账号的用户名
    • 在分配变量之前我必须创建一个对象吗?
    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多