我有两个模型,当我执行 request.POST.get('room_id') 或 ('id') 时,我收到一个错误房间匹配查询不存在。如何解决这个问题?帮我
教室(模型。模型):
status = models.BooleanField('Status',default=True)
name = models.CharField('Name', max_length=100, unique=True)
类书(模型。模型):
date = models.DateTimeField('Created',auto_now_add=True)
from_date = models.DateField('签到')
to_date = models.DateField('退房')
room = models.ForeignKey(Room, related_name='booking')
我需要详细的房间请求获取 ID,预订日期范围(from_date,to_date)
def room_detail(请求,pk):
房间 = get_object_or_404(房间,pk=pk)
如果 request.method == 'POST':
form = BookForm(request.POST,room=room)
如果 form.is_valid():
s = form.save(commit=True)
s.save()
返回重定向(请求。路径)
别的:
表单 = BookForm()
#roomid = Room.objects.values('id')
type = request.POST.get('id') # 或 get('room_id')
rooms = Room.objects.get(id=type)
start_dates = rooms.booking.values_list('from_date',flat=True)
end_dates = rooms.booking.values_list('to_date',flat=True)
日期 = [start + timedelta(days=i) for start, end in … 我正在学习 Django,我使用 ForeignKey 来链接我的模型。icontains 在非外键的领域工作。
我想过滤模型中的项目以仅显示与查询集匹配的字段。但查询集提出:相关字段得到无效查找:icontains
请帮忙。下面是我的模型和视图
我的模特
class Category(models.Model):
category = models.CharField(max_length=200, default='', blank=True, null=True)
def __unicode__(self):
return self.category
class StoreItems(models.Model):
item_name = models.CharField(max_length=200, default='', blank=True, null=True)
def __unicode__(self):
return self.item_name
class Supplier(models.Model):
supplier_name = models.CharField(max_length=200, default='', blank=True, null=True)
def __unicode__(self):
return self.supplier_name
class Unit(models.Model):
unit = models.CharField(max_length=200, default='', blank=True, null=True)
def __unicode__(self):
return self.unit
class Store(models.Model):
category = models.ForeignKey(Category, blank=True, null=True)
item_name = models.ForeignKey(StoreItems, blank=True, null=True)
quantity = models.IntegerField(default='', blank=True, null=False)
receive_amount = models.IntegerField(blank=True, null=True) …Run Code Online (Sandbox Code Playgroud) 我有以下经理:
class Totals(Manager):
def by_customer_and_date(self, start_date, end_date):
qs = self.model.objects.filter(
date__range=(start_date, end_date)
).values(
"customer"
).annotate(
...bunch of stuff...
)
return qs
Run Code Online (Sandbox Code Playgroud)
customer与另一个对象的 FK 关系在哪里。现在,查询集打包在相关customer对象的 ID 中,但我希望它使用显示名称,这样我就可以为我的模板很好地打包它。
现在,我已将以下内容添加到管理器中:
for q in qs:
q['customer'] = Customer.objects.get(id=q.get('customer')).name
Run Code Online (Sandbox Code Playgroud)
它工作正常,但感觉像是额外的工作......对我来说,它是 50 个数据库点击而不是一个。是否有任何快捷方式可以立即将显示名称放入 qs 字典中?
我无法理解如何做到这一点。
我有一个带有 start_datetime 字段的事件模型。我想选择 datetime.now() >= start_datetime - 24 小时的所有事件。
我尝试使用 filter() 但我不明白如何告诉“start_datetime - 24h”。
你能帮我吗?
我对 Django 很陌生,我正试图弄清楚如何解决这个问题。这是我的模型:
class Product(models.Model):
code = models.CharField(max_length=50)
name = models.CharField(max_length=50)
class ProductDetail(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, editable=False)
price = models.DecimalField(max_digits=5, decimal_places=2, default=Decimal('999.99'))
available = models.BooleanField(default=True)
validity_tms = models.DateTimeField(default=timezone.now)
Run Code Online (Sandbox Code Playgroud)
基本上,对于每个产品,我想跟踪价格和可用性的变化。因此,每个产品都存在许多 ProductDetail。
需要时,我需要获取每个产品的code、name、available和price字段,但只与每个产品的最大validity_tms 的 ProductDetail 相关。
这个 QuerySet 只包含我需要的部分信息:
ProductDetail.objects.values('product').annotate(max_date=Max('validity_tms'))
Run Code Online (Sandbox Code Playgroud)
我也如何检索价格和可用字段?
有没有办法解决这个问题?我在模型中做错了吗?
抱歉这个愚蠢的问题。
我不知道在哪里可以找到此解决方案或任何关键字参考。
比方说,我有 2 个模型 Place 和 Tips,并且:
# list of place id
place_id_list = [...]
Run Code Online (Sandbox Code Playgroud)
如何在 place_id_list 上过滤提示,该列表仅为每个地方检索 <= 5 个提示对象
这是模型:
class Place:
...
class Tip:
# object_id is id of place
object_id = models.PositiveIntegerField(editable=False)
content_type = models.ForeignKey(ContentType)
Run Code Online (Sandbox Code Playgroud)
现在,我只使用for 循环,如:
tip_list = []
for place_id in place_id_list:
tip_list += Tip.objects.filter(object_id=place_id, content_type...)[0:5]
Run Code Online (Sandbox Code Playgroud)
但是这个查询似乎很慢。
有没有更好的解决办法?
谢谢。
根据 doc - https://docs.djangoproject.com/en/dev/topics/db/queries/#the-pk-lookup-shortcut - 我可以获得列表 id 中指定的一组对象。有没有什么捷径可以获取另一组对象,id 不在指定列表中。Blog.objects.filter(pk__not_in=[1,4,7]) - 对我不起作用。PS:是否有任何关于过滤查询集、制作自己的短表达式的可能表达式的注释?
我需要将来自不同模型的两个查询集合并为一个。我在网上找到的最推荐的解决方案是:
使用|and &,但这仅适用于来自同一模型的查询集
使用chainand list,但这会带走一些查询集方法,并且由于我项目中代码的结构方式,我无法更改它。我试过了,没有用。
我读过Q,但我不清楚如何应用它来完成我需要的。
基本上我需要将来自不同模型的两个查询集组合成第三个查询集,而不是列表。它们共享一些字段名称,也许这对Q. 例如:
queryset_1 = Cars.objects.all().filter(color='red')
queryset_2 = Horses.objects.all()
queryset_3 = queryset_1 + queryset_2
queryset_3.order_by('date')
Run Code Online (Sandbox Code Playgroud) 我如何使用select_related下面的员工类的名字和姓氏。
class Employee(models.Model):
"""
Model, which holds general information of an employee.
"""
user = models.OneToOneField(User, related_name='users',
on_delete=models.CASCADE, unique=True)
photo_logo = models.FileField(null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
emp=Employee.objects.filter(pk=1).select_related('user').values('user_first_name','user_last_name','id')
Run Code Online (Sandbox Code Playgroud)
但是在运行打印语句后我得到以下日志 django shell
Cannot resolve keyword 'user_first_name' into field. Choices are: address, address_id, attendance, basic,
Run Code Online (Sandbox Code Playgroud) 我尝试queryset使用When Case. 它只能在一个for带有动态参数的循环后构建。
我有模型的例子Employee:
class Employee(models.Model):
account_type = models.TextField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
我想像这样更新它,如果 id = 1 那么 value = 1,如果 value = 2 那么 value = 2
Employee.objects.update(
account_type=Case(
When(id=1,
then=Value("1")),
When(id=2,
then=Value("2")),
),
)
Run Code Online (Sandbox Code Playgroud)
但我想要的id是动态的,所以我不能构建静态查询集。我想构建Case一个for loop。我的理想是这样的:
final_case = None
for one_id in list_id:
final_case += Case(When(id=one_id, then=Value(one_id)))
Run Code Online (Sandbox Code Playgroud)
我只想构建final_case和更新
Employee.objects.update(account_type=final_case)
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?谢谢