【问题标题】:How to create new model using pk如何使用 pk 创建新模型
【发布时间】:2021-12-29 16:14:59
【问题描述】:

我试图让用户加入房间(因此创建一个新的 RoomMember),但这是我得到的错误: “无法分配“room_name”:“RoomMember.room”必须是“Room”实例。” (提前致谢)

*
Views.py:
def join_room(request, pk):
    RoomMember.objects.create(room=pk, user=request.user).save()
    return redirect('room_detail')

Urls.py:
    path("join/<int:pk>/room/", views.join_room, name="join_room"),

Models.py:
class Room(models.Model):
    name = models.CharField(max_length=100)
    about = models.TextField(max_length=500, null=True, blank=True)
    creator = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='room_creator')
    members = models.ManyToManyField(User, through="RoomMember")
    
    
class RoomMember(models.Model):
    approved = models.BooleanField(default=False, blank=False)
    room = models.ForeignKey(Room, related_name='memberships', on_delete=models.CASCADE)
    user = models.ForeignKey(User, related_name='user_groups', on_delete=models.CASCADE)
    
        
class Messages(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=False, blank=False)
    text = models.CharField(max_length=10000, blank=False, null=False)
    date = models.DateTimeField(default=datetime.now)
    room = models.ForeignKey(Room, null=True, blank=False, on_delete=models.CASCADE)

Html:
                <a class="btn btn-dark" href="{% url 'join_room' pk=room.pk %}">Join</a>*

【问题讨论】:

    标签: python django django-models slug


    【解决方案1】:

    如下更改您的视图以首先查询房间对象。

    Views.py:
    def join_room(request, pk):
        myroom = Room.objects.get(id=pk)
        RoomMember.objects.create(room=myroom, user=request.user).save()
        return redirect('room_detail')
    

    【讨论】:

      【解决方案2】:

      只需添加尝试以确保故障安全。用yagus回答 视图.py:

      from django.http import Http404
      def join_room(request, pk):
          try:
              myroom = Room.objects.get(id=pk)
              RoomMember.objects.create(room=myroom, user=request.user).save()
              return redirect('room_detail')
          except Room.DoesNotExist:
              raise Http404("Content does not exist")
      

      【讨论】:

        猜你喜欢
        • 2017-05-24
        • 1970-01-01
        • 2014-04-08
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多