【问题标题】:How can I display something from data base after multiple criteria is satisfied in django在 django 中满足多个条件后,如何从数据库中显示某些内容
【发布时间】:2022-11-13 20:51:11
【问题描述】:

这里我有一个模型推荐:

class Recommenders(models.Model):
    objects = None
    Subject = models.ForeignKey(SendApproval, on_delete=models.CASCADE, null=True)
    Recommender = models.CharField(max_length=20, null=True)
    Status = models.CharField(null=True, max_length=8, default="Pending")
    Time = models.DateTimeField(auto_now_add=True)

另一个模型批准者:

class Approvers(models.Model):
    objects = None
    Subject = models.ForeignKey(SendApproval, on_delete=models.CASCADE, null=True)
    Approver = models.CharField(max_length=20, null=True)
    Status = models.CharField(null=True, max_length=8, default="Pending")
    Time = models.DateTimeField(auto_now_add=True)

我的 SendApproval 模型为:

class SendApproval(models.Model):
    Subject = models.CharField(max_length=256)
    Date = models.DateField(null=True)
    Attachment = models.FileField(upload_to=get_file_path)
    SentBy = models.CharField(null=True, max_length=100)
    Status = models.CharField(null= True, max_length=8, default="Pending")

现在我的问题是,只有当 Recommenders 表中与该主题相关的所有推荐者状态为“已批准”时,我才必须显示 SendApproval 表中的主题和附件 不知道我怎么知道...提前谢谢...

实际上对解决方案没有任何想法,但最好的答案将不胜感激......顺便说一下,我是 StackOverflow 的新手......所以如果我的问题有歧义,请告诉我。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    提供两种方式。

    1.这里的 Recommenders 模型由 Status='Approved' 字段过滤。通过与主模型关联的 Subject 字段,我可以访问 SendApproval 字段。

    将 bboard 替换为放置模板的文件夹的名称。我有这个:应用程序文件夹中的模板/bboard。

    视图.py

    def info(request):
        recomm = Recommenders.objects.filter(Status='Approved')
    
        return render(request, 'bboard/templ.html', {'context': recomm})
    

    网址.py

    urlpatterns = [
        path('info/', info, name='info'),
    ]
    

    模板

    {% for a in context %}
    <p>{{ 'Subject' }} : {{ a.Subject.Subject }} {{ 'Attachment' }} : <a href="{{ a.Subject.Attachment }}">Link</a>
        {{ 'id SendApproval' }} : {{ a.Subject.id }}</p>
    {% endfor %}
    

    2.您还可以通过链接到主模型的辅助模型中的字段按主模型过滤。在这里,我在过滤器中传递了小写的模型名称和搜索字段。

    在主模型中,默认情况下会创建一个属性来引用辅助模型,这是模型的小写名称和 _set 前缀。在外层循环中,将所有接收到的primary模型的行排序出来,在内层循环中,通过recommenders_set.all(),我们得到Status。如您所见,它已获得批准。

    sa = SendApproval.objects.filter(recommenders__Status='Approved')
    print(sa)
    for i in sa:
      for k in i.recommenders_set.all():
         print('status', k.Status)
    

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多