使用postgresql查询的Django(1.11)ORM无法比较日期

时间:2018-02-12 12:07:38

标签: django postgresql

Django(1.11)使用postgresql查询的ORM无法比较日期。我需要leave_date_fromleave_date_to之间的数据。 我期待一条记录。

我的模型如下:

class EmployeeLeaveApp(models.Model):
    user = models.ForeignKey(User, models.DO_NOTHING, on_delete=models.CASCADE)
    leave_date_from = models.DateField(blank=True, null=True)
    leave_date_to = models.DateField(blank=True, null=True)

我的查看查询是:

inputdate = '2018-03-05'
duplicateleave = crm_models.EmployeeLeaveApp.objects.filter(
    leave_date_from__gte=inputdate,
    leave_date_to__lte=inputdate,
    user=user)

我的表格数据如下:

leave_date_from | leave_date_to | user
2018-03-01      | 2018-03-10    | 1
2018-03-07      | 2018-03-22    | 1

到目前为止,我尝试了很多解决方案,但没有运气。

1 个答案:

答案 0 :(得分:2)

public class ProductContext : ContainerContext<AutofacModule>
{
    public IProductProvider ProductProvider { get; }
    public static ProductContext GiventServices() => new ProductContext();

    protected ProductContext()
    {
        ProductProvider = Resolve<IProductProvider>();
    }

    public List<JObject> WhenListProducts(int categoryId) => ProductProvider.List(categoryId);
}

==== OR ====如果出现错误[TestFixture] public class ProductProviderTests { [Test] public void ShouldHaveProducts() { var services = ProductContext.GiventServices(); var products = services.WhenListProducts(1); products.Count.Should().NotBe(0); } [Test] public void ShouldHaveDuplicateVariants() { var services = ProductContext.GiventServices(); var products = services.WhenListProducts(1); var anyDuplicate = products.GroupBy(x => x.SelectToken("variant").ToString()).Any(g => g.Count() > 1); anyDuplicate.Should().Be(true); } [Test] public void ShouldNotHaveDuplicateGtins() { var services = ProductContext.GiventServices(); var products = services.WhenListProducts(1); var anyDuplicate = products.GroupBy(x => x.SelectToken("gtin").ToString()).Any(g => g.Count() > 1); anyDuplicate.Should().Be(false); } } ,请使用。

from datetime import datetime    
inputdate = datetime.strptime(inputdate, '%Y-%m-%d')    
duplicateleave = crm_models.EmployeeLeaveApp.objects.filter(
    leave_date_from__gte=inputdate,
    leave_date_to__lte=inputdate,
    user=user
)

django期望参数中有一个dateobject,但是你要将字符串传递给它。所以使用这个