Python 在Django的views.py中创建foreignkey时出错
我得到以下错误:Python 在Django的views.py中创建foreignkey时出错,python,django,sqlite,Python,Django,Sqlite,我得到以下错误: ValueError at /answer_question/ Cannot assign "'USERNAME_OF_MY_ACCOUNT_IN_DJANGO'": "Answer.author" must be a "Customer" instance. 当我在Django的数据库中创建一个新对象时 views.py def answer_question(request): if request.us
ValueError at /answer_question/
Cannot assign "'USERNAME_OF_MY_ACCOUNT_IN_DJANGO'": "Answer.author" must be a "Customer" instance.
当我在Django的数据库中创建一个新对象时
views.py
def answer_question(request):
if request.user.is_authenticated:
path = request.GET.get('path')
print(str(path))
title = request.POST.get('answer-title-input')
print(str(title))
context = request.POST.get('answer-context-input')
print(str(context))
path=str(path)
post=str(path[7:])
print("POST = " + post)
post = get_object_or_404(Post, title=post)
print("POST FROM DATABASE = " + str(post))
Answer.objects.create(
title = title,
context = context,
date=("Date"),
author = request.user.username,
post = post,
)
return redirect(path)
作者应该是发布答案的人
models.py
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank = True)
name = models.CharField(max_length=200, null=True)
email = models.EmailField(max_length=200, null=True)
about = models.CharField(max_length=100, null=True, help_text="Use this field for notes about the customer.")
image = models.ImageField(null=True, blank=True)
@property
def imageURL(self):
try:
url = self.image.url
except:
url = 'placeholder.png'
return url
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=200, null=True)
context = models.TextField(max_length=1702, blank=True, validators=[MaxLengthValidator(1702)])
date = models.DateField(("Date"), default=date.today)
author = models.ForeignKey(
Customer,
on_delete=models.CASCADE,
null=True
)
def __str__(self):
return self.title
class Answer(models.Model):
title = models.CharField(max_length=200, null=True)
context = models.TextField(max_length=1702, blank=True, validators=[MaxLengthValidator(1702)])
date = models.DateField(("Date"), default=date.today)
author = models.ForeignKey(Customer, on_delete=models.CASCADE, null=True)
post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.title
这意味着一个客户可以提出一个问题:“如何做某事”,另一个客户可以在该帖子上回答:“这里有一个解决问题的方法”。就像堆栈溢出一样。有一个foreignkey将帖子链接到客户。答案课上也有一个。他们都必须有一个作者我做错了什么
author = request.user.username,
它应该从请求中获取已登录的用户,并将其分配给foreignkey。尝试在创建应答时使用customer对象:
Answer.objects.create(
title = title,
context = context,
date=("Date"),
author = request.user.customer,
post = post,
)
您的Answer.author是客户的外键,当您使用request.user.username时,这意味着获取id字符串不是实例,不是客户的用户名,您可以尝试以下方法
customer = Customer.objects.filter(user=request.user)
Answer.objects.create(title = title,
context = context,
date=("Date"),
author = customer,
post = post,)
author是customer的外键,所以它应该是request.user.customer,而不是.username,因为这只是一个字符串,不是user或customer实例