【发布时间】:2021-08-05 21:23:51
【问题描述】:
假设有一个事件模型,每个事件都有一个客户和一个顾问。此外,一位顾问可以有多个事件。每个事件都有许多不同的文档。我正在尝试在顾问登录时显示事件列表,并且在该列表中应该显示它们各自的文档。
模型.py:
class Client_Profile(models.Model):
user_id = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE) # Field name made lowercase.
first_name = models.CharField(db_column='First_name', max_length=50) # Field name made lowercase.
last_name = models.CharField(db_column='Last_name', max_length=50) # Field name made lowercase.
phone_number = models.PositiveIntegerField(db_column='Phone_number', max_length=10) # Field name made lowercase.
# role_id = models.ForeignKey(Role, on_delete=models.CASCADE)
def __str__(self):
return self.first_name
class Consultant_Profile(models.Model):
user_id = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE) # Field name made lowercase.
first_name = models.CharField(db_column='First_name', max_length=50) # Field name made lowercase.
last_name = models.CharField(db_column='Last_name', max_length=50) # Field name made lowercase.
phone_number = models.PositiveIntegerField(db_column='Phone_number', max_length=10) # Field name made lowercase.
# role_id = models.ForeignKey(Role, on_delete=models.CASCADE)
def __str__(self):
return self.first_name
class Event(models.Model):
event_id = models.AutoField(db_column='event_id', primary_key=True)
client_id = models.ForeignKey(Client_Profile, db_column='Client_ID', on_delete=models.CASCADE) # Field name made lowercase.
consultant_id = models.ForeignKey(Consultant_Profile, db_column='Consultant_ID', on_delete=models.CASCADE) # Field name made lowercase.
def __str__(self):
return str(self.event_id)
class Document(models.Model):
document_id = models.AutoField(db_column='document_id', primary_key=True)
document_name = models.CharField(db_column='document_name', max_length=50, null=True, blank=True) # Field name made lowercase.
path = models.FileField(null=True, upload_to='files/')
date_uploaded = models.DateTimeField(default=timezone.now, null=True, blank=True)
event_id = models.ForeignKey(Event, db_column='Client_ID', on_delete=models.CASCADE) # Field name made lowercase.
def __str__(self):
return self.document_name + ": " + str(self.path) # this specifies how should instance of this class should be printed.
views.py
@login_required
def consultant_home(request):
consultant_pr = Consultant_Profile.objects.get(user_id=request.user)
event_id = Event.objects.filter(consultant_id=consultant_pr.pk)
for id in event_id:
doc = Document.objects.filter(event_id=id)
context = {'id': event_id, 'doc': doc, 'consultant_pr': consultant_pr}
return render(request, 'Consultant/consultant_documents.html', context)
文档.html
{% for eve in id %}
<p>Event id: {{ eve.event_id }}</p>
{% for dox in doc %}
<p>document name: {{ dox.document_name }}</p>
<p>path: <a href="/media/{{dox.path}}">{{ dox.path}} </a> </p>
{% endfor%}
{% endfor %}
【问题讨论】:
-
已在here 详细讨论。
-
combine 对你想要的东西来说是一个误称,你不想组合查询集,你只想要相关的实例。