2016-03-12 4 views
1

Проблема в том, что когда я пытаюсь сравнить два свойства, которые являются одинаковыми, когда мы проверяем их в оболочке, но условие не является полным, и я понятия не имею, почему. Я имею в виду это условие: {%, если c.author = member.name%}Поля доступа в Django

просмотров:

cvs = Cv.objects.all() 
    cv = Cv.objects.filter(author = request.user) 
    per = Person.objects.all() 
    gr = Group.objects.filter(members__name=request.user) 

    for c in cvs: 
     print c.author 

    mem = Membership.objects.all() 
    form = GroupForm() 


    context = { 
     'gr': gr, 
     'per':per, 
     'mem':mem, 
     'form': form, 
     'cvs':cvs, 
     'cv':cv, 
    } 

    return render(request, 'groups.html', context) 

models.py:

class Cv(models.Model): 
    author = models.ForeignKey('auth.User') 
    name = models.CharField(max_length=25, null = True) 
    surname = models.CharField(max_length=25, null = True) 
    address = models.CharField(max_length=100, blank=True) 
    telephone = models.IntegerField() 
    birth_date = models.DateField(blank=True, null=True) 
    email = models.EmailField(max_length=50, null=True) 
    skills = models.TextField(null=True) 
    specialization = models.CharField(max_length=30, blank=True, null=True) 
    interests = models.TextField(blank=True, null=True) 
    summary = models.TextField(blank=True, null=True) 
    thumbnail = models.FileField(upload_to=get_upload_file_name, blank=True) 


    @property 
    def age(self): 
     return int((datetime.datetime.now().date() - self.birth_date).days/365.25) 

    def zapisz(self): 
     self.save() 

    def __str__(self): 
     return self.surname 




class Person(models.Model): 
    name = models.CharField(max_length=128) 

    def __str__(self):    # __unicode__ on Python 2 
     return self.name 


class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(Person, through='Membership') 

    def __str__(self):    # __unicode__ on Python 2 
     return self.name 


class Membership(models.Model): 
    person = models.ForeignKey(Person) 
    leader = models.BooleanField(default=False) 
    group = models.ForeignKey(Group) 

groups.html:

{% block profile %} 


     {% for g in gr %} 
     <div class="jumbotron"> 
      <p><b>GROUP:</b> {{g.name}}</p> 
      {% for c in cvs %} 
      {% for member in g.members.all %} 
       {% if c.author = member.name %} 
       {{member.name}} 
       {% endif %} 
      {% endfor %} 
      {% endfor %} 
     </div> 
     {% endfor %} 



{% endblock %} 

Спасибо за ответ!

ответ

1

Для проверки равенства в шаблоне Django, необходимо использовать оператор равенства == следующим образом:

{% if c.author == member.name %} 
    {{member.name}} 
{% endif %} 
+0

все тот же выход - ничего. Только группы отображаются все время, не более:/ – Damian

+1

Вывод '{{c.author}}' и '{{member.name}}' над тестом на равенство для визуализации того, что они есть, и если они равны – gtlambert

+0

Да , я проверить их, как: {% для с в CVS%}

Первый выход: {{c.author}}

{% ENDFOR%} { % для члена в g.members.all%}

Второй выход: {{}} member.name

{% ENDFOR%} ' И вывод:' Первый выход: Захи Первый выход: Дамиан Первый выход: тест Первый о utput: Kacper Второй выход: Дамиан Второй выход:! Kacper» Таким образом, есть то же самое, когда я имею в виду название„Каспер“ – Damian

2

Во-первых, пожалуйста, дайте переменные имена. «c» и «gr» невозможно понять.

Во-вторых, вы не сравниваете правильные вещи вообще. c.author - экземпляр пользователя; member - это экземпляр Person и member.name - это строка. Сравнение экземпляра пользователя со строкой всегда будет терпеть неудачу.

И, наконец, все это ужасно неэффективно - и, вероятно, совершенно не нужно. Три вложенных цикла - это огромное количество итераций. Если бы вы могли объяснить, каков должен быть результат, мы можем почти наверняка придумать лучший способ сделать это.

+0

Ну, когда я получил этот код: {% for g in gr%}

GROUP: {{g.name}}

{% for member in g.members.all %}

Member: {{member.name}}

{% endfor %}
{% endfor%}. Я получил то, что хочу, я имею в виду, я хочу отображать все группы, а затем, в каждой другой группе, всех пользователей, которые включены. Я получил это с помощью этого кода выше, но у меня есть только имя пользователей - cv.authors - тогда они oryginall, и они не могут быть заменены. – Damian

+0

Но я хочу сделать их ссылками на их профили.Например:

Член:{{cv.name}} {{cv.surname}}

. Вот почему я просто использую здесь модель Cv. – Damian

0

Вы должны сравнить c.name с member.name или c.author.first_name с member.name. Таким образом, обе переменные должны быть строками.

+0

Не работает, потому что, если мы выберем c.name, мы получим «Damian», а member.name - «damian», поэтому они не совпадают. Оба метода, которые были введены, не работают. Выход пуст – Damian

+0

вы можете использовать {% c.name | upper == member.name | верхний%) (untied) –

Смежные вопросы