Insert với foreign key

11:01 01/03/2021khienhd3 trả lời105 lượt xem1 thích

Mình tạo 1 model là:

 class Images(models.Model):
    image_id = models.ForeignKey(User,on_delete=models.CASCADE)
    image_path = models.ImageField(upload_to='static/media/', blank = True, null = True)

và view là:

  def post(self, request, *args, **kwargs):
        data = request.POST
        image = request.FILES.get('image')
        user_owner = request.user.id
        print('data:', data)
        print('image:', image)
        print(request.user.id)
        images = Images.objects.create(
            image_id = user_owner,
            image_path = image
        )
        my_context = {}
        return render(request, self.template_name, my_context)

khi upload thử thì bị lỗi. Cannot assign "2": "Images.image_id" must be a "User" instance.

Mình có tìm qua cách insert mà chưa được. Bạn chỉ cách cho mình với

Đã chỉnh sửa lúc 14:44 03/03/2021
Gửi Trả Lời

3 phản hồi, đã có trả lời đúng

  1. Chào bạn, image_id của bạn đang Foreign key đến bảng User, do đó bạn nên gán trực tiếp image_id = user_owner nha. Mình đề xuất thay vì đặt tên field là image_id, bạn nên đặt field đó tên là ‘user’ luôn cho dễ hình dung bạn nha, khi đó thì user = user_owner hoặc user_id = user_owner.id (user_owner = request.user)

    Đã chỉnh sửa lúc 16:20 03/03/2021
    Trả lời được chọn
  2. MÌnh tìm được lỗi rồi. Tuy không hiểu rõ lắm nhưng code run được rồi

    user_owner = request.user

    để thế này insert vào bảng là id = 2 (id của user)

    Tại sao get ra 2 để insert vảo luôn thì không được bro nhỉ

    user_owner = request.user.id

    Mong được giải thích

  3. Mình lại gặp lỗi trên và lại không biết cách sửa.

    TypeError: Field 'id' expected a number but got <SimpleLazyObject: <User: khienhd>>

    Mong bạn chỉ cho mình cái này với nhé.