Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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 具有最终用户模型的任务模型_Python_Django - Fatal编程技术网

Python 具有最终用户模型的任务模型

Python 具有最终用户模型的任务模型,python,django,Python,Django,我试图用当前用户(EndUser)创建一个任务,它的标题和创建日期,但是我只能用字段=['title']规范创建任务。我想让用户字段自动填入最终用户(当前用户)和创建日期 models.py class EndUser(models.Model): user = models.OneToOneField(User, null=True, blank = True, on_delete=models.CASCADE) name = models.CharField(max_leng

我试图用当前用户(EndUser)创建一个任务,它的标题和创建日期,但是我只能用
字段=['title']
规范创建任务。我想让用户字段自动填入
最终用户
(当前用户)和创建日期

models.py

class EndUser(models.Model):
    user = models.OneToOneField(User, null=True, blank = True, on_delete=models.CASCADE)
    name = models.CharField(max_length = 200, null=True)
    email = models.CharField(max_length = 200, null=True)
    date_created = models.DateField(auto_now_add = True)
    def __str__(self):
        return self.name

class Tag(models.Model):
    CATEGORY = (('My Day', 'My Day'),   
            ('Important', 'Important'),
            ('Planned', 'Planned'),)
    name = models.CharField(max_length=200, null=True, choices=CATEGORY)
    def __str__(self):
        return self.name

class Task(models.Model):
    user = models.ForeignKey(EndUser, null= True, on_delete = models.SET_NULL)
    title = models.CharField(max_length = 200)
    date_created= DateField(auto_now = True)
    tags = models.ManyToManyField(Tag, blank = True)
    def __str__(self):
        return self.title
views.py

@authenticated_user
def mainPage(request):
    tasks = Task.objects.all()
    form = TaskForm()
    if request.method == 'POST':
        form = TaskForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/')

    context = {'tasks': tasks[::-1], 'form':form}
    return render(request, 'tasks/todoList.html', context)
forms.py

class TaskForm(ModelForm):
    title = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Add a task' , 'size': '5'}))
    class Meta:
        model = Task
        fields =  ['title']
        #fields = "__all__"

class CreateUserForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username','email','password1','password2']
尝试了下面的代码,但出现错误
ValueError:cannotassign”“:“Task.user”必须是“EndUser”实例。

    ...
    if request.method == 'POST':
        form = TaskForm(request.POST)
        if form.is_valid():
            task =  form.save(commit=False)
            task.user = request.user # gives error
            task.save()
            return redirect('/')
    ...


您的
请求.user
很可能是
用户
对象,而不是
最终用户
对象。您可以通过
request.user.EndUser
获得相应的
EndUser
对象,当然,如果登录用户具有相关的
EndUser

@authenticated_user
def mainPage(request):
    tasks = Task.objects.all()
    form = TaskForm()
    if request.method == 'POST':
        form = TaskForm(request.POST)
        if form.is_valid():
            form.instance.user = request.user.enduser
            form.save()
            return redirect('/')

    context = {'tasks': tasks[::-1], 'form':form}
    return render(request, 'tasks/todoList.html', context)
@authenticated\u用户
def主页(请求):
tasks=Task.objects.all()
表单=任务表单()
如果request.method==“POST”:
表单=任务表单(request.POST)
如果form.is_有效():
form.instance.user=request.user.enduser
form.save()
返回重定向(“/”)
上下文={'tasks':tasks[:-1],'form':form}
返回呈现(请求'tasks/todoList.html',上下文)

注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见