标签: django-queryset

django 模型请求获取 id 错误房间匹配查询不存在

我有两个模型,当我执行 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 django-queryset models python-3.x

1
推荐指数
1
解决办法
1144
查看次数

引发查询集:相关字段查找无效:​​icontains

我正在学习 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)

django django-models django-queryset

1
推荐指数
1
解决办法
5735
查看次数

Django - 如何在 queryset .values() 中获取显示名称

我有以下经理:

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 字典中?

django django-queryset

1
推荐指数
1
解决办法
5914
查看次数

Django 查询集:如果 datetime.now() 大于字段,则过滤 DateTimeField - 24 小时

我无法理解如何做到这一点。

我有一个带有 start_datetime 字段的事件模型。我想选择 datetime.now() >= start_datetime - 24 小时的所有事件。
我尝试使用 filter() 但我不明白如何告诉“start_datetime - 24h”。
你能帮我吗?

django filter django-queryset

1
推荐指数
1
解决办法
5259
查看次数

Django QuerySet 聚合和加入

我对 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。

需要时,我需要获取每个产品的codenameavailableprice字段,但只与每个产品的最大validity_tms 的 ProductDetail 相关。

这个 QuerySet 只包含我需要的部分信息:

ProductDetail.objects.values('product').annotate(max_date=Max('validity_tms'))
Run Code Online (Sandbox Code Playgroud)

我也如何检索价格可用字段?

有没有办法解决这个问题?我在模型中做错了吗?

python django django-queryset

1
推荐指数
1
解决办法
2256
查看次数

Django过滤器限制对象

抱歉这个愚蠢的问题。

我不知道在哪里可以找到此解决方案或任何关键字参考。

比方说,我有 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)

但是这个查询似乎很慢。

有没有更好的解决办法?

谢谢。

django django-queryset

1
推荐指数
1
解决办法
4538
查看次数

Django - 获取id不在值集中的查询集

根据 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:是否有任何关于过滤查询集、制作自己的短表达式的可能表达式的注释?

django-models django-queryset

1
推荐指数
1
解决办法
1349
查看次数

如何将来自不同模型的两个查询集合并为一个?

我需要将来自不同模型的两个查询集合并为一个。我在网上找到的最推荐的解决方案是:

使用|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)

python django django-queryset models

1
推荐指数
1
解决办法
4582
查看次数

如何使用 select_related

我如何使用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)

django django-queryset python-3.x

1
推荐指数
1
解决办法
685
查看次数

在for循环django中构建When Case查询

我尝试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)

有人知道怎么做吗?谢谢

django django-queryset django-rest-framework

1
推荐指数
1
解决办法
228
查看次数