Django模板(如果选择字段)

时间:2018-12-30 17:52:06

标签: python django templates

我目前正在尝试弄清楚如何检查状态是否确实适用于用户请求。

models.py

class CategoryRequests(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    status = StatusField()
    STATUS = Choices('Waiting', 'Rejected', 'Accepted')

views.py

def view_profile_categoy_requests_accepted(request, pk=None):
    if pk:
        user = get_user_model.objects.get(pk=pk)
    else:
        user = request.user
    args = {'user': user}
    return render(request, 'myproject/category_request_accepted.html', args)

但是在模板上,这似乎是错误的。

template.html

{% if user.categoryrequests.status == 'Waiting' %}

预先感谢

2 个答案:

答案 0 :(得分:0)

您可以在模型中为related_name添加一个ForeignKey参数。

class CategoryRequests(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='status')
    status = StatusField()
    STATUS = Choices('Waiting', 'Rejected', 'Accepted')

然后在模板中添加以下内容:

{% if user.status.STATUS == 'Waiting' %}

This answer详细介绍了related_name

答案 1 :(得分:0)

有问题-#include <stdio.h> int main(void){ int array[100], i; for(i=0; i<100; i++) array[i]=i; int *ptr1, *ptr2, flag=0; ptr1 = &array[0]; ptr2 = &array[0]; while(!flag){ for(i=0;i<100;i++){ if(*ptr1 > array[i]){ ptr1 = &array(i); break; }else if(*ptr2 < array[i]){ ptr2 = &array(i); break; } } if(i==100) flag=1; } printf("%d %d", *ptr1, *ptr2); } 。如果尚未在Foreignkey字段上设置user.categoryrequests,则无法进行这样的反向查找。

您有两个选择:

1。。还使用related_name从用户那里获得反向外键。

2。或,在外键上将user.categoryrequests_set设置为related_name,然后您可以按照当前的方式进行反向查找。


请参阅有关reverse lookups的文档。