簡體   English   中英

Django 基於另一個沒有指定關系的表過濾查詢集

[英]Django filter a queryset based on another table without specified relationship

好的,所以這可能是一個奇怪的問題,但這是我的問題。 在沒有涉及太多細節的情況下,我需要向屬性發送通知,但前提是有相應的標題搜索。 這是我的模型。 兩者之間有明確的關系。 但它們在一個共同的領域具有共同的價值。 他們都有一個屬性包裹號(通知的包裹號在外鍵可訪問的相關字段中)

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)

所以。 這是我的問題。 我無法在沒有產權搜索的情況下向房產發送通知。 但是標題搜索會在一段時間后過期,所以我不一定想把它們聯系在一起。

我正在嘗試獲取一個查詢集,該查詢集將 select 所有狀態為“SendNotice”並且在文件中具有相同包裹號的未過期標題搜索的通知。 查詢集檢查的排序,以確保宗地號在活動標題搜索列表中。

謝謝,

好的,與此同時,我發現了一種解決問題的笨拙方法。 它有效,但有點難看。

因此,如果不創建兩個模型之間的關系,我就無法找到一種方法來檢查通知中是否存在有效的標題搜索。

作為一種解決方法,我查詢了所有未過期的標題搜索並轉換為包裹號列表(我用來跨表查找的鍵)

# 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)

然后我在過濾器中添加了一個 __in 搜索,以檢查父表中的宗地號是否在我們之前創建的活動標題搜索的宗地號列表中。

# grab only notices that have title searches
ts_junk_notice = Notice.objects.filter(status="SendNotice", violation_fk__parcel_number__in=active_title_searches)

這似乎可以解決問題。 它有點像一個子查詢來檢查是否有活動的標題搜索,但我正在某處閱讀 django 文檔,它說一些 dbs 很難執行嵌套查詢,你應該做 2 個簡單的查詢。 因此建立一個列表並在其中檢查。

我不確定這是否對任何人有幫助,但希望確實如此。

ps 我還從其他人那里找到了這個 package,描述了一個類似的問題,也可以幫助你。 https://www.reddit.com/r/django/comments/7fvlf7/join_two_models_without_a_foreign_key/

https://github.com/martsberger/django-joinfield

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM