Django 다 대다 필드 데이터 렌더링
Sep 03 2020
저자와 편집자가 모두 편집 옵션을 가질 수 있고 편집자는 저자가 할당 할 수있는 블로그 사이트를 만들고 싶었습니다. 이제 내 모델 필드는 다음과 같습니다.
class Editor(models.Model):
name = models.OneToOneField(Author, on_delete=models.CASCADE, null=True, blank=True)
class Blog(models.Model):
title = models.CharField(max_length=150, null=True, blank=True)
author = models.ForeignKey(Author, on_delete=models.CASCADE, null=True, blank=True)
editor = models.ManyToManyField(Editor, blank=True)
date_created = models.DateTimeField(auto_now_add=True)
article = models.TextField(blank=True, null=True)
genre = models.ManyToManyField(Genre, blank=True)
def __str__(self):
return self.title
및 views.py :
def blog(request, pk):
if request.user.is_authenticated:
blogs = Blog.objects.get(id=pk) //for dynamic url
editors = Editor.objects.all()
context = {'blogs':blogs,'editors':editors}
return render(request, 'blog/blog.html', context)
그런 다음 액세스하는 사람이 저자인지 편집자인지 확인하고 싶었으므로 if 조건을 작성했습니다.
{% if request.user.author == blogs.author or blogs.editor %}
<a href="#" class="btn btn-warning">Edit</a>
{% endif %}
하지만 안타깝게도 편집 버튼은 누구나 액세스 할 수 있습니다. 어떻게해야합니까?
답변
southernegro Sep 04 2020 at 03:20
가장 먼저.
{% if request.user.author == blogs.author or blogs.editor %}
<a href="#" class="btn btn-warning">Edit</a>
{% endif %}
이 코드에서는 조건이 잘 정의되어 있지 않습니다. 내 제안은 이렇게 만드는 것입니다.
{% if request.user.author == blogs.author or request.user.author == blogs.editor %}
<a href="#" class="btn btn-warning">Edit</a>
{% endif %}
이것은 하나의 제안입니다.
이제 또 다른 가능성은 JavaScript를 사용하는 것입니다.
이를 위해 내 자신의 코드 예제를 제공합니다.
<script type="text/javascript">
var editor = '{{user.author.editor}}'
if (editor == 'False'){
document.getElementById('edit').innerHTML = ''
}
</script>
이 코드에서는 사용자가 편집자가 아닌 경우 id 'edit'로 요소 (html)를 숨기지 않을 것임을 정의합니다. 따라서 템플릿에서 요소에 ID를 설정하십시오.
<a id="edit" href="#" class="btn btn-warning">Edit</a>
이를 위해 모델에 부울 필드를 설정해야합니다. 다음과 같이 할 수 있습니다.
class Editor(models.Model):
name = models.OneToOneField(Author, on_delete=models.CASCADE, null=True, blank=True)
editor = models.Boolean()