Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django的views.py中创建foreignkey时出错_Python_Django_Sqlite - Fatal编程技术网

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实例