django基于没有指定关系的另一个表过滤查询集

vx6bjr1n  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(296)

好吧,这个问题可能有点奇怪,但这是我的问题。由于没有太多细节,我需要发送通知到属性,但只有当有一个相应的标题搜索。这是我的模型。两者之间有特定的关系。但他们在同一个领域有着共同的价值观。它们都有一个属性地块号(通知的地块号位于外键可访问的相关字段中)

class Notice(models.Model):
    status_choice = [
        ("SendNotice", "SendNotice"),
        ("NoticeSent", "NoticeSent")
    ]

    violation_fk = models.OneToOneField(Violation, on_delete=models.CASCADE)
    date_created = models.DateTimeField(auto_now_add=True)
    notice_number = models.CharField(max_length=10)
    date_sent = models.DateTimeField(blank=True, null=True)
    status = models.CharField(choices=status_choice, max_length=10)
    instructions = models.TextField(blank=True, null=True)

class TitleSearch(models.Model):
    address = models.CharField(max_length=50)
    parcel_number = models.CharField( max_length=24)
    title_search_date = models.DateField(auto_now=False, auto_now_add=False)
    expiration_date = models.DateField(auto_now=False, auto_now_add=False)
    owner = models.CharField(max_length=100)
    attn_line = models.CharField(max_length=150, blank=True)
    street_address = models.CharField(max_length=150)
    city = models.CharField(max_length=25)
    state = models.CharField(max_length=2)
    zip_code = models.CharField(max_length=5)

所以。这是我的问题。我不能在没有产权查询的情况下向物业发送通知。但是标题搜索会在一段时间后过期,所以我不一定要将它们绑定在一起。
我正在尝试获取一个查询集,该查询集将选择所有状态为“sendnotice”且在具有相同包裹号的文件中具有未过期标题搜索的通知。某种查询集检查,以确保地块号位于活动标题搜索列表中。
谢谢您,

dbf7pr2w

dbf7pr2w1#

好吧,所以在此期间,我找到了一种解决问题的方法。它工作,但有点难看。
因此,如果不在两个模型之间创建一个关系来检查通知中是否存在有效的标题搜索,我就找不到方法。
作为解决方法,我查询了所有未过期的标题搜索,并将其转换为地块编号列表(我用于跨表查找的键)


# Get list of Title Search for jank in query

active_title_searches = TitleSearch.objects.filter(expiration_date__gte=timezone.now())
active_title_searches = active_title_searches.values_list("parcel_number", flat=True)

然后,我在过滤器中添加了一个搜索中的\uu,以检查父表中的地块号是否在我们先前创建的活动标题搜索的地块号列表中。


# grab only notices that have title searches

ts_junk_notice = Notice.objects.filter(status="SendNotice", violation_fk__parcel_number__in=active_title_searches)

这似乎起到了作用。它有点像一个子查询来检查是否有一个活动的标题搜索,但是我在某处阅读django文档,它说一些数据库很难执行嵌套查询,你应该做两个简单的查询。因此,构建一个列表并在其中进行检查。
我不确定这是否对任何人都有帮助,但希望有帮助。
p、 我还从其他人那里找到了这个包裹,上面描述了一个类似的问题,也可以帮助你解决。https://www.reddit.com/r/django/comments/7fvlf7/join_two_models_without_a_foreign_key/
https://github.com/martsberger/django-joinfield

相关问题