提问人:Bubble 提问时间:10/26/2023 最后编辑:Bubble 更新时间:10/26/2023 访问量:37
使用 .get(slug=slug) 获取模型对象返回错误:邀请匹配查询不存在
getting model object using .get(slug=slug) return an error: Invitation matching query does not exist
问:
我正在使用 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})
urls.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)
我该如何解决这个问题?因此,当我单击链接时,它会显示个人信息,我使用的是 id 而不是 id,因为使用 id:一个人可以通过输入 id 的号码来查看某些人的信息,但使用 slug,则看不到其他人的信息。slug
答:
0赞
SamSparx
10/26/2023
#1
问题出在这条线上:
link = reverse('Invitation_Information', args=[str(instance.room_type.slug)])
您正在生成一个链接,其中包含属于 RoomType 的 slug,而不是邀请。您还需要为反向查找提供相同的大小写。以下方法应该可以修复它:
link = reverse('invitation_information', args=[str(instance.slug)])
评论
0赞
Niko
10/26/2023
还需要修复 url 命名空间,以便框架可以正确反向解析它。 全部小写。invitation_information
评论