[英]Task model with EndUser model
I'm trying to create a task with the current user(EndUser), its title and date_created, but I can create the task with only fields=['title']
specification.我正在尝试使用当前用户(EndUser)、其标题和 date_created 创建一个任务,但我只能使用
fields=['title']
规范创建任务。 I'd like to have the user field automatically filled with an EndUser
(current user) and a creation date.我想让用户字段自动填充
EndUser
用户(当前用户)和创建日期。
models.py模型.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视图.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 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']
Tried the code below but this gives error ValueError: Cannot assign "<SimpleLazyObject: <User: user1212>>": "Task.user" must be a "EndUser" instance.
尝试了下面的代码,但这给出了错误
ValueError: Cannot assign "<SimpleLazyObject: <User: user1212>>": "Task.user" must be a "EndUser" instance.
: :
...
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('/')
...
Your request.user
, is likely a user
object, not an enduser
object.您的
request.user
可能是user
object,而不是enduser
object。 You can obtain the corresponding EndUser
object with request.user.enduser
, given of course the logged in user has a related EndUser
:您可以通过
request.user.enduser
获得相应的EndUser
object ,当然登录用户有一个相关的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)
Note : It is normally better to make use of the
settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use theUser
model [Django-doc] directly.注意:通常最好使用
settings.AUTH_USER_MODEL
[Django-doc]来引用用户 model,而不是直接使用User
model [Django-doc] 。 For more information you can see the referencing theUser
model section of the documentation .有关更多信息,您可以查看参考文档的
User
model部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.