【问题标题】:I am not able to get a field in my Django ManyToMany Relation我无法在我的 Django ManyToMany Relation 中获得字段
【发布时间】:2021-02-06 09:45:12
【问题描述】:

我的 Django 模型中有一个名为公告的模型,它的工作方式是它有一个消息字段,我可以输入消息的正文以及作为消息接收者的 student_id。我在 student_id 上使用多对多字段,这样我就可以将消息发送给某个特定的学生,然后在他们的前端过滤特定的学生消息,但是当我尝试过滤特定的学生时我在发送消息时选择了,它根本不显示任何信息。

models.py

class Announcement_by_dean(models.Model):
    student_id = models.ManyToManyField(add_students_by_manager)
    message = models.TextField()
    sent_date = models.DateField(default=datetime.now(), blank=True)
    updated_date = models.DateField(auto_now=True, blank=True)

    def __str__(self):
        return "message sent on "+ str(self.sent_date)

class add_students_by_manager(models.Model):
    manager_ID = models.ForeignKey(Manager_login_information, on_delete=models.CASCADE)
    student_ID = models.CharField(max_length=200)
    student_name = models.CharField(max_length=200)
    phone_number = models.CharField(max_length=200)
    address = models.CharField(max_length=200)
    dob = models.CharField(max_length=200)
    major = models.CharField(max_length=200)
    password = models.CharField(max_length=200)

    def __str__(self):
        return self.student_name

views.py

def dean_page(request):
    annoucement_list = Announcement_by_dean.objects.all().order_by('-id')
    return render(request, 'dean_page.html', context)

dean_page.html

<div class="tab-pane fade show" id="nav-announcement-list" role="tabpanel" aria-labelledby="nav-announcement-list-tab">
  {% if annoucement_list %}
  {% for k in annoucement_list %}
  <div class="card container mt-4 mb-5">
    <div class="card-body">
      Messsage: {{k.message}}<br>
      Sent to: {{k.student_id.student_ID}}<br>
    </div>
  </div>
  {% endfor %}
  {% else %}
  <div class="mt-4 ml-5 pl-5">
    <span class="text-muted container pt-5 pl-5 ml-5">No Annoucement(s) has been made</span>
  </div>
  {% endif %}
</div>

【问题讨论】:

    标签: python html django django-models django-views


    【解决方案1】:

    您需要遍历 student_id,因为它是多对多字段。

    {% for student in k.student_id.all %}
        {{ student.student_ID }}
    {% endfor %}
    

    【讨论】:

    • 如果我想在 Django 管理员中也有类似的东西。如何修改“ def __str__(self): return "message sent on "+ str(self.sent_date)" + " to " + str(self.student_id.student_ID) 以获得类似的东西。
    • @coderboy 你需要遍历self.student_id.all()。像', '.join([i.student_ID for i in self.student_id.all()]) 这样的东西会给你一个逗号分隔的字符串。
    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 2017-03-22
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多