2013-08-06 59 views
0

models.py從數據庫

class ReportType(models.Model): 
    report = models.ForeignKey(Report) 
    title = models.CharField('Incident Type', max_length=200) 

class Report(models.Model): 
    user = models.ForeignKey(User, null=False) 
    app_uuid = models.CharField('Unique App Id', max_length=100) 

class Types(models.Model): 
    user = models.ForeignKey(User, null=True) 
    title = models.CharField('Incident Type', max_length=200) 
    is_active = models.BooleanField('Is Active', default=True) 

比較兩個字段的數據類型在表中,我節省用戶輸入的標題field.The數據的一些默認的數據保存在REPORTTYPE表。

我想比較類型模型和ReportType模型中標題字段中的數據。經過比較,如果ReportType模型中的標題字段數據在類型模型中不存在,則需要在template中顯示該數據。我需要顯示ReportType模型中存在不匹配的值。

template.html

{% for type in report_type %} 
{{type.title}}{% endfor %} 

我試圖與此查詢

report_type = Report.objects.filter(reporttype__title=F('types__title')) 

我收到此錯誤"Cannot resolve keyword 'types' into field",這是因爲類型表中沒有與報告table.Need幫助的關係。

+0

對我來說,它看起來像你應該重新考慮你的模型。 「報告」可能應該有一個FK到「ReportType」,而不是相反。請添加一些關於您嘗試實現的內容的更多信息。 –

+0

@ dan-klasson,我試圖實現從類型table.Types表中的不匹配項目有一些默認值存儲,同時用戶輸入的數據保存在ReportType表中,我想檢查用戶輸入的數據是否不可用在類型表中,如果不是,我需要在模板中顯示不匹配的項目。 –

回答

0

看來你至少需要2個查詢則:

# get all types as a list 
all_types = Types.objects.values_list('title', flat=True) 

# you need to show the mismatch, then use exclude() 
report_type = ReportType.objects.exclude(title__in=all_types) 

希望它能幫助。

+0

如何比較兩個模型標題字段,如果它們在兩個標題字段數據中不匹配,則需要在模板中顯示。如何查詢兩個表格的數據並進行比較。 –

+0

檢查我編輯的答案然後,你需要使用'exclude()'而不是'filter()',因爲你只想得到不匹配的列表 –

+0

我感到困惑,我在報告對象中使用排除。我想選擇標題從ReportType模型和Types類型模型中進行比較,如果它們不匹配需要顯示不匹配的那個。我在控制檯上打印report_type,它打印Report對象。如果它們在兩個模型標題字段中都不匹配,它就不會在模板中顯示。我更新了我的模板。 –

0

您可以過濾REPORTTYPE對象,並得到結果的查詢集報告是這樣的:

ReportType.objects.values_list('report').filter(title__in=Types.objects.values_list('title', flat=True).distinct())