Как использовать related_name 2 моделей в 1 шаблоне Django - PullRequest
0 голосов
/ 14 мая 2018

Привет, Djangonauts Я новичок в Django, поэтому, пожалуйста, прости меня, если в моей логике или коде есть глупые ошибки. У меня есть 4 модели. Пользователь, группа, сообщение и проверка.

Пользователь - это просто модель обычного пользователя

Группы - это темы (пример: велосипед, баскетбол, катание на каноэ ...) Пользователь выбирает, какую группу и пишет сообщение в этой группе.

Пост : пост похож на «задание», которое автор показывает, как это сделать (пример: как ездить на велосипеде на 1 колесе ...). Последняя модель - это модель Proof, в которой другие пользователи отвечают, что они сделали то, что объясняется в посте.

Доказательство : Когда другие пользователи делают то, что говорится в посте. У них есть 2 загрузки 2 изображения, нажмите кнопку отправить, и их имя будет добавлено к участникам, которые выполнили «задание»

Ниже мое Доказательство models.py

Пользователь = get_user_model ()

class Proof(models.Model):
    user = models.ForeignKey(User, related_name='proofmade')
    post = models.ForeignKey(Post, related_name='postproofmade')
    made_at = models.DateTimeField(auto_now=True)
    image_of_task= models.ImageField()
    proof_you_made_it = models.ImageField()
    suggestions = models.CharField(max_length=1000)

Ниже мой пост.models.py

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')
    group = models.ForeignKey(Group, related_name='posts')
    title = models.CharField(max_length=250, unique=True)
    slug = models.SlugField(allow_unicode=True, unique=True)
    message = models.TextField()
    post_image = models.ImageField()
    made = models.ManyToManyField(User, blank=True, related_name='post_made')

ниже мой пост_детальный просмотр

class PostDetail(SelectRelatedMixin, DetailView):
    model = Post
    select_related = ('user', 'group')

    def get_queryset(self):
        queryset = super().get_queryset()
        return queryset.filter(user__username__iexact=self.kwargs.get('username'))

ниже - мой шаблон post_detail (здесь проблема)

{% if user in post.made.all %}
    {% for proof in post.postproofmade.all %} #I know I am referencing the related_name incorrectly. I have tried various options none seem to work 
    <a href="{% url 'proof:proof_delete' slug=post.slug pk=proof.pk %}">
        <img src="{% static 'images/thumbs_up_yes.png' %}" height="25px">
    </a><br/>
    {% endfor %}
    {% else %}
    <a href="{% url 'proof:new_proof' slug=post.slug %}">
        <img src="{% static 'images/thumbs_up_no.png' %}" height="25px">
    </a><br/>
{% endif %}

Я только что понял, что может быть небольшая проблема с этим кодом. Если есть 2 человека, которые выполняют задачу, изображение с изображением большого пальца показывает 2 раза. Если 3 человека должны были сделать задачу. Изображение вверх показывает 3 раза. Я не хочу этого Изображение Thumbs up должно отображаться только один раз.

Если пользователь не входит в число участников, выполнивших задание, то оно отображается правильно. Или, если пользователь является анонимным пользователем, даже тогда он показывает правильно. (см. Изображение проблемы ниже) .

Большой палец вверх - это кнопка переключения, похожая на «как в Facebook». Только в том, что он имеет форму для добавления 2 изображений, чтобы доказать, что вы это сделали, и удаления доказательства, которое выводит вас из списка людей, выполнивших задачу. Эта функциональность работает нормально

{% for user in user.proofmade.all | slice:":1" %} #This gets the job done 
#But I am afraid its not production worthy. I would love a actual solution. If 
#not can someone tell me. What are the bad effects of using this 
#If there are 10,000 people who do the task will the forloop run 
#10,000 times and show just 1 result?

enter image description here enter image description here

...