我正在使用 django 创建通知系统,当创建邀请模型时,我使用 django 信号创建通知模型,但是当我创建邀请模型时,单击通知模板中的链接,它显示:
Invitation matching query does not exist
。这是一个预订应用程序,我们希望通过电子邮件将该链接发送给创建邀请模型的人,以便他可以看到他的信息,但是当我在通知模板中单击该链接时,该链接不会提供该人的信息说:DoesNotExist at /invitation_information/OlaRooms-123297186425/ Invitation matching query does not exist
。
views.py
def invitation_information(request, slug):
invitation = Invitation.objects.get(slug=slug)
return render(request, 'invitations.html', {'invitation':invitation})
url.py
path('invitation_information/<slug:slug>/', views.invitation_information, name='invitation_information'),
通知模板
<div class="container">
<div class="row">
{% for notification in notifications %}
{% if not notification.is_read %}
<div class="col-md-3">
<div class="card">
<div class="card-body">
<a href="{{ notification.link }}">
{{ notification.message }}
</a>
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</div>
信号:
@receiver(post_save, sender=Invitation)
def notification_signals(sender, instance, created, **kwargs):
message = f"{instance.first_name} {instance.last_name} booked our {instance.room_type.room_type} room for {instance.number_of_day} day"
link = reverse('Invitation_Information', args=[str(instance.room_type.slug)])
room_id_number = generate_random_number()
notification = Notification.objects.create(
user=instance.room_type.user, message=message, link=link,
room_id_number=room_id_number
)
notification.save()
我的模特:
class Room(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
room_type = models.ForeignKey(RoomType, on_delete=models.CASCADE)
description = models.TextField()
image_1 = models.ImageField()
image_2 = models.ImageField()
image_3 = models.ImageField()
image_4 = models.ImageField()
slug = models.SlugField(unique=True, default=generate_random_number_for_slug)
def __str__(self):
return str(self.room_type)
class Invitation(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=150)
room_type = models.ForeignKey(Room, on_delete=models.CASCADE)
created_on = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(unique=True, default=generate_random_number)
def __str__(self):
return str(self.first_name)
class Notification(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
is_read = models.BooleanField(default=False)
message = models.TextField()
link = models.URLField()
room_id_number = models.CharField(max_length=225, unique=True)
我该如何解决这个问题?这样当我点击链接时,它会显示人员信息,我使用
slug
而不是 id,因为使用 id:一个人可以通过输入 id 的数字来查看一些人的信息,但使用 slug,一看不到其他人的信息。
问题出在这一行:
link = reverse('Invitation_Information', args=[str(instance.room_type.slug)])
您正在生成一个带有属于 RoomType 的 slug 的链接,而不是邀请。以下应该修复它:
link = reverse('Invitation_Information', args=[str(instance.slug)])