我的模型中有一个字段
class myModel(models.Model):
published = models.BooleanField(
default=False,
help_text="Whether this is visible."
)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的详细视图非常简单明了
class myDetailView(DetailView):
template_name = "detail.html"
model = myModel
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法,在布尔值为 False 的情况下在相应的 django.views.generic.DetailView 上呈现 404 错误。如何才能实现这一目标?
我想将字段“卷”更新为卷+=change_by。我想通过“change_by”变量增加查询集中所有对象的该字段的现有值,无论“change_by”变量包含什么。
queryset = QueueStatusModel.objects.all()
queryset.update(volume+=iph_change)
Run Code Online (Sandbox Code Playgroud)
这不起作用。有人可以帮忙吗?
我想获得一天和一周内加入的用户总数,我尝试如下
member_in_day = User.objects.exclude(is_staff=True)\
.annotate(day=TruncDay('date_joined')).values('date_joined') \
.annotate(total_members=Count('date_joined')) \
.order_by('-date_joined')
member_in_week = User.objects.exclude(is_staff=True)\
.annotate(week=TruncWeek('date_joined')).values('date_joined') \
.annotate(total_members=Count('date_joined')) \
.order_by('-date_joined')
Run Code Online (Sandbox Code Playgroud)
该模型是用户,我得到的两个查询的输出是相同的,而不是一天它也给出其他查询集。如何将今天的总计和本周的总计添加到模板中
<QuerySet [{'date_joined': datetime.datetime(2020, 12, 28, 16, 47, 40, 509134, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 23, 11, 8, 19, 241355, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 23, 11, 6, 14, 20673, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 22, 9, 25, 45, 14632, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 22, 9, 24, 25, 819750, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 20, 12, 7, …Run Code Online (Sandbox Code Playgroud) 我有一个名为Collection的Django模型,它代表一组项目(CollectionItem).每个集合仅包含特定类型的项目.(CollectionItem有Collection的外键).
我想获取特定类型的公共标记列表中的所有CollectionItem,并返回按特定字段排序.这是我使用的查询代码:
lists = Collection.objects.filter(is_public=True, type=7)
items = CollectionItem.objects.none()
for list in lists:
items |= CollectionItem.objects.filter(collection=list)
items = items.order_by('name')
Run Code Online (Sandbox Code Playgroud)
我必须想象,当我拥有一个包含大量列表和项目的大型数据库时,这根本无法很好地扩展.在Django中有更好的方法吗?或者与其他我不应该担心的选项相比,查询循环中涉及的低效率是否可以忽略不计?
有没有办法在Qjango中将QuerySet转换为Q对象?
我的具体动机:我想从另一个QuerySet(qs_B)中减去一个QuerySet(qs_A).我能想到的唯一方法是使用exclude()和一个等同于qs_A的Q对象.
例:
def my_function(qs_A, qs_B):
# Here I need to transform qs_A to a Q object q_obj_A
qs_new = qs.exclude(q_obj_A)
return qs_new
Run Code Online (Sandbox Code Playgroud) 我想随时更新各种型号。
我需要使用小写字母等价更新varchar字段。
知道是否可以通过单个查询集完成?
我们怎样才能在Django中进行通配符搜索.如果我从数据库中的列表中过滤用户名,如何使用这些确切的用户名或部分用户名显示过滤后的数据.
def filter(request):
val3=''
if request.GET.has_key('choices'):
val2=request.GET.get('choices')
if request.GET.has_key('textField'):
val3=request.GET.get('textField')
if request.POST:
val2=request.POST.get('choices')
val3=request.POST.get('textField')
if val2=='Designation':
newData = EmployeeDetails.objects.filter(designation=val3)
flag=True
elif val2=='Name':
newData = EmployeeDetails.objects.filter(userName=val3)
flag=True
elif val2=='EmployeeID':
newData = EmployeeDetails.objects.filter(employeeID=val3)
flag=True
elif val2=='Project':
newData = EmployeeDetails.objects.filter(project=val3)
flag=True
elif val2=='DateOfJoin':
newData = EmployeeDetails.objects.filter(dateOfJoin=val3)
flag=True
else:
return HttpResponseRedirect('/employeeList/')
Run Code Online (Sandbox Code Playgroud)
这是我的过滤功能.现在用精确的单词过滤.我想显示userNames,即使它的一部分用于过滤.请帮我解决这个问题,因为我是Django的新手
django django-templates django-models django-queryset django-views
棘手的代码:
user = User.objects.filter(id=123)
user[0].last_name = 'foo'
user[0].save() # Cannot be saved.
id(user[0]) # 32131
id(user[0]) # 44232 ( different )
Run Code Online (Sandbox Code Playgroud)
用户无法以这种方式保存.
普通代码:
user = User.objects.filter(id=123)
if user:
user[0].last_name = 'foo'
user[0].save() # Saved successfully.
id(user[0]) # 32131
id(user[0]) # 32131 ( same )
Run Code Online (Sandbox Code Playgroud)
那么,问题是什么?
我在两个不同的地方使用一段代码,以便动态生成一些表单字段。在这两种情况下,dynamic_fields都是一个字典,其中的键是对象,值是对象列表(在空列表的情况下,值是False):
class ExampleForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
dynamic_fields = kwargs.pop('dynamic_fields')
super(ExampleForm, self).__init__(*args, **kwargs)
for key in dynamic_fields:
if dynamic_fields[key]:
self.fields[key.description] = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=dynamic_fields[key], required=False)
class Meta:
model = Foo
fields = ()
Run Code Online (Sandbox Code Playgroud)
在一个视图中,对于任何键,该值都是通过单个数据库查询(单个正常查询集)返回的对象列表。这种观点很好。
在另一个视图中,它需要多个查询才能获得构造给定值所需的一切。我首先实例化具有等于空白列表的值的字典,然后使用基本列表理解(dict[key] += queryset)一次将从这些多个查询中获得的查询集添加到适当的列表中。这使每个值成为一个二维列表,然后通过执行以下操作将其展平(并删除重复项):
for key in dict:
dict[key] = list(set(dict[key]))
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的方法-将每个查询集中的查询直接附加到值/列表,使用append而不是将其保留为列表列表,+=但每次都会遇到相同的错误:'list' object has no attribute 'none'。
通过回溯查看,错误出现在表单的clean方法中。这是django.forms.models中代码的相关部分:
def clean(self, value):
if self.required and not value:
raise ValidationError(self.error_messages['required'], code='required')
elif not self.required and not value:
return …Run Code Online (Sandbox Code Playgroud) 我有下一个查询集:
Article.objects.filter(finished=True, updated_at__range=[start, end]).extra(
select={'hour': 'extract(hour from updated_at)'}).values('hour').annotate(categorized=Count('id'))
Run Code Online (Sandbox Code Playgroud)
我得到错误:
“ ProgrammingError:列引用” updated_at“含糊不清LINE 1:SELECT(从updated_at提取(小时))AS” hour“,COUNT(” art ...“
我应该怎么做?
编辑:查询集的工作原理不按日期“ updated_at__range = [开始,结束]”进行过滤,但我需要该过滤器。
django ×10
django-queryset ×10
python ×5
django-forms ×1
django-orm ×1
django-q ×1
django-views ×1
sql ×1