【发布时间】:2020-08-17 21:20:44
【问题描述】:
我有 3 个模型:第一个主要的“石头”通过 ForeignKey 与“Typs”连接,多对多与“Mentions”连接。 当我尝试使用 DetailView 类为每个“石头”编写详细视图模板时,它仅显示来自“石头”和“类型”的数据,而不是来自“提及”的数据
我的models.py(必要部分)
class StonesManager(models.Manager):
def all_with_prefetch_mentions(self):
qs = self.get_queryset()
return qs.prefetch_related('mentions')
class Stones(models.Model):
title = models.CharField(max_length=30, verbose_name='Назва')
place = models.TextField(verbose_name='Месцазнаходжанне')
legend = models.TextField(null=True, blank=True, verbose_name='Легенда')
typ = models.ForeignKey('Typ', null=True, on_delete=models.PROTECT, verbose_name='Тып')
objects = StonesManager()
class Typ(models.Model):
name = models.CharField(max_length=20, db_index=True, verbose_name='Назва тыпу')
def __str__(self):
return self.name
class StonesImage(models.Model):
image = models.ImageField(upload_to=stones_directory_path_with_uuid)
uploaded = models.DateTimeField(auto_now_add=True)
stones = models.ForeignKey('Stones', on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Mentions(models.Model):
work = models.TextField(verbose_name='Праца')
year = models.PositiveIntegerField(blank=True, null=True)
sacral_objects = models.ManyToManyField(Stones, related_name='mentions', verbose_name='Сакральны аб\'ект')
my views.py(必要部分)
class StonesDetail(generic.DetailView):
queryset = Stones.objects.all_with_prefetch_mentions()
template_name = 'volumbf/stone_detail.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['image_form'] = self.stones_image_form()
return context
def stones_image_form(self):
if self.request.user.is_authenticated:
return StonesImageForm()
return None
我的模板(必要部分) 1.一切都以正确的方式显示
<h2> {{ stones.title}} </h2>
<p>{{ stones.legend }} </p>
<p>{{ stones.place }}</p>
<p>Typ: <a href="/volumbf/{{ stones.typ.pk }}/">{{ stones.typ.name }}</a></p>
- 根本不显示
提及:
{% for work in stones.mentions.work %}
<p><a href="{% url 'work_detail' work.pk %}"> {{ stones.mentions.work }}</a></p>
{% endfor %}
{% for i in object.stonesimage_set.all %}
<li class="list-inline-item" >
<img scr="{{ i.image.url }}">
</li>
{% endfor %}
{% if image_form %}
<div>
<h2 >Upload New Image</h2>
<form method="post"
enctype="multipart/form-data"
action="{% url 'StonesImageUpload' stones_id=object_id %}" >
{% csrf_token %}
{{ image_form.as_p }}
<p ><button class="btn btn-primary"></button> </p>
</form>
</div>
{% endif %}
我认为“stones.mentions.work”不是正确的名称,但我不确定。拜托,我在这里做了我的第一步,需要任何帮助。
【问题讨论】:
标签: django django-models django-views django-templates django-orm