【问题标题】:Django: Filtering query with foreign key not workingDjango:使用外键过滤查询不起作用
【发布时间】:2015-11-04 05:12:27
【问题描述】:

我想过滤带有外键的查询,但它似乎不想识别它。 status 可以是 'open''closed'

models.py

class Status(models.Model):
    status = models.CharField(primary_key=True, max_length=100)

class Incident(models.Model):
    incident_date_reported = models.DateField('Date Reported', default=timezone.now)
    status = models.ForeignKey(Status, default="open")

views.py

def index(request):

    template = "index.html"                 
    form = IncidentSearchForm(request.GET)

    if request.method == 'GET':

        form = IncidentSearchForm()

        ############## MY QUERY THAT DOESN'T LIKE THE FOREIGN KEY #############
        incident_list = Incident.objects.filter(status = 'open').order_by('-incident_date_reported')
        #######################################################################

       context = {  "form": form,
                    "incident_list": incident_list
                  }

        return render(request, template, context)

【问题讨论】:

    标签: python django django-models filter foreign-keys


    【解决方案1】:

    你的status 本身就是一个模型,所以你应该这样做:

    incident_list = Incident.objects.filter(status__status='open').order_by('-incident_date_reported')
    

    另外我认为你的设计没有多大意义。如果您只需要一个字符串作为Incident 的状态,则不需要模型Status,只需将status 字段带到Incident,您的旧查询就可以工作。

    编辑: 如果您想将您的选择限制为某个集合,您应该考虑使用choiceshttps://docs.djangoproject.com/en/1.8/ref/models/fields/#choices

    那么你的模型就变成了:

    class Incident(models.Model):
        STATUS_CHOICES = (
            ('open',   'Open'),
            ('closed', 'Closed'),
            # some other statuses go here
        )
        incident_date_reported = models.DateField('Date Reported',
                                                  default=timezone.now)
        status = models.CharField(max_length=20,
                                  choices=STATUS_CHOICES,
                                  default='open')
    

    【讨论】:

    • 我仍然无法让它工作。此外,我想让数据更加严格,这样用户只有这么多可用选项可供选择(在本例中为 2,希望将来更多),这就是我将 Status 设为模型的原因。 __ 应该可以工作.... idk
    • 怎么不起作用?你看到了什么?你得到什么错误?
    • 我更新了你的答案。请阅读 django 文档参考以获取更多信息。
    猜你喜欢
    • 2020-05-29
    • 2014-10-10
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2023-03-11
    • 2022-06-25
    • 2015-02-15
    相关资源
    最近更新 更多