dimanche 6 juin 2021

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

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)

Error: ValueError at /create_task/ Cannot assign "<SimpleLazyObject: <User: Dominic>>": "Task.customer" must be a "Customer" instance.

I am trying to link the username in the user account to be shown on the model Task.customer that represents the post is created by that user. May I ask any methods could be done in order to specify the customer in the model Task? Also I do not understand the error message in detail because my admin panel already has the current username in the Customer model. However if I used request.user.customer the username does not show up instead returning None so how to solve this issue?




Aucun commentaire:

Enregistrer un commentaire