- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Django 中使用查询集 - 每当我运行服务器时,它都会给出错误。
TypeError: Field 'id' expected a number but got <django.db.models.query_utils.DeferredAttribute object at 0x000002B6ADE878D0
我的表单的查询集导致了错误。
我不知道这是否是我的 models.py 或我的 forms.py 的问题我尝试在 Google 上查找这个 DeferredAttribute 对象,但我并没有真正看到任何适合我的答案。
forms.py:
from .models import Task, Categories
from django import forms
from django.forms import ModelForm
from django.db.models import Q
class TaskForm(ModelForm):
task_title = forms.CharField(max_length=100)
task_description = forms.CharField(widget=forms.Textarea)
due_date = forms.DateTimeField()
is_completed = forms.BooleanField()
#categories = forms.ModelChoiceField(empty_label="---None---")
class Meta:
model = Task
fields = ['task_title', 'task_description', 'due_date', 'is_completed', 'categories', 'parent']
def __init__(self, user, *args, **kwargs):
# Get all the categories from the database for that specific user
super(TaskForm, self).__init__(*args, **kwargs)
# It is something about this line that causes the error
self.fields['categories'].queryset = Categories.objects.filter(Q(user_id__isnull=True) | Q(user_id=user.id))
models.py:
from django.db import models
from django.db.models import Q
from users.models import CustomUser
from django.urls import reverse
from django.contrib.auth import get_user_model
class Categories(models.Model):
category_type = models.CharField(max_length=50)
user = models.ForeignKey(CustomUser, null = True, on_delete=models.CASCADE)
def __str__(self):
return '%s ' % (self.category_type)
def get_absolute_url(self):
return reverse('task_list')
class Task(models.Model):
task_title = models.CharField(max_length=100)
task_description = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
due_date = models.DateTimeField()
is_completed = models.BooleanField(default=False)
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
categories = models.ForeignKey('Categories', on_delete=models.CASCADE)
parent = models.ForeignKey("self", on_delete=models.CASCADE)
class Meta:
verbose_name = "Task"
verbose_name_plural = "Tasks"
def __str__(self):
return '%s ID: %s' % (self.task_title, self.last_name)
def get_absolute_url(self):
return reverse('task_detail')
自定义用户模型:
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
nationality = models.CharField(null=True, blank=True, max_length=60)
views.py:
from django.views.generic import TemplateView
from django.views.generic.edit import UpdateView, DeleteView , CreateView
from django.urls import reverse_lazy
from .forms import TaskForm
from django.contrib.auth import get_user_model
from django.http import JsonResponse
from django.template.loader import render_to_string
class TaskListView(TemplateView):
template_name = "tasks.html"
# This is the actual create view I am for using now
class TaskCreateView(CreateView):
template_name = 'create.html'
form_class = TaskForm(get_user_model())
success_url = reverse_lazy('task_list')
# I am using this for a modal, but its not working so I fell back to the normal create view
def task_create(request):
form = TaskForm(get_user_model())
context = {'form': form}
html_form = render_to_string('tasks/partial_task_create.html',
context,
request=request,
)
return JsonResponse({'html_form': html_form})
最佳答案
类似的声明:
form = TaskForm(<s>get_user_model()</s>)
没有多大意义。事实上,get_user_model()
返回对用户类的引用,而不是对用户对象(如登录用户)的引用。您可以使用以下方式构建这样的表单:
from django.contrib.auth.decorators import login_required
<b>@login_required</b>
def task_create(request):
form = TaskForm(<b>request.user</b>)
context = {'form': form}
html_form = render_to_string('tasks/partial_task_create.html',
context,
request=request,
)
return JsonResponse({'html_form': html_form})
这里我们使用@login_required
decorator [Django-doc]防止未登录的用户访问该 View 。这很有用,因为在这种情况下 request.user
不是用户对象。
或在CreateView
[Django-doc]中您可以覆盖 get_form_kwargs
method [Django-doc]至:
from django.contrib.auth.mixins import LoginRequiredMixin
class TaskCreateView(<b>LoginRequiredMixin</b>, CreateView):
template_name = 'create.html'
form_class = <b>TaskForm</b>
success_url = reverse_lazy('task_list')
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
<b>kwargs.update(user=self.request.user)</b>
return kwargs
为了强制用户登录,我们使用 LoginRequiredMixin
mixin [Django-doc] .
关于python - 类型错误 : Field 'id' expected a number but got DeferredAttribute object at 0x000002B6ADE878D0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59615964/
背景 我在 Django Cache Machine 中发现了一个相当严重的错误,它在从 Django 1.4 升级到 1.7 后导致它的失效逻辑失去理智。 该错误被本地化为在扩展缓存机器的 Cach
我正在尝试通过管理员保存模型,但我一直收到此错误 unsupported operand type(s) for +: 'DeferredAttribute' and 'str'". 我想返回模型的字
在我的 models.py 中,我有以下类(class): class AvailabilityTypes(): STUDYING = 'STUDYING' WORKING = 'WO
经过几天的寻找,我仍然无法跨过这个障碍。我只是想打印一份来自卖家的描述列表作为 View 。这是我正在使用的... 模型.py: from django.db import models class
我收到错误,AttributeError: 'DeferredAttribute' 对象没有属性 'objects'。我想解析 Excel 并将其放入 model(City&Prefecture&Ar
我是 Wagtail 和 Django 的新手,我正在尝试构建一个模型,该模型将从 REST API 中提取数据并将其放入可以在模板上迭代的对象中。但是,在尝试迁移时,出现此错误: relat
我是 django 的新手。我真的对 View 过滤器感到困惑。 这是我的models.py: class Author(models.Model): title = models.CharF
这是我第一次使用 Django REST FRAMEWORK,我遇到了注册 api 的问题,第一次尝试时 api 工作正常,但在接下来的尝试中,它开始抛出此错误 AttributeError: 'De
免责声明:我对 Django 相当陌生(试图自学),目前正在尝试获取一个几乎没有文档的包 https://github.com/byteweaver/django-coupons为我正在构建的应用程序
我想将所有模型字段写入一个文本文件,但我得到:我该如何解决这个问题?我正在制作患者注册表,注册后我想查看文本文件中的所有模型字段。代码有效,我得到一个文本文件,但我看到的不是预期值,而是一个延迟属性。
我在 Django 中使用查询集 - 每当我运行服务器时,它都会给出错误。 TypeError: Field 'id' expected a number but got get_user_model
我在 django Rest freamework 应用程序中创建了新模型,但收到此错误消息: 类型错误:% 不支持的操作数类型:“DeferredAttribute”和“dict” 这是错误截图:
免责声明:我只是一个尝试学习 Django 的新手 您好,我正在尝试重构我的代码并将我创建的所有 View 修改为基于类的 View 。 我在加载带有 DeleteView 的表单时遇到问题,该表单显
我是一名优秀的程序员,十分优秀!