簡體   English   中英

Django:無法保存模型 - 錯誤:“id”需要一個數字,但得到了<django.db.models.fields.related.ForeignKey...>

[英]Django: unable to save model - Err: "id" expected a number but got <django.db.models.fields.related.ForeignKey...>

我真的沒有想法,我嘗試了一切。 基本上我只是想保存一些項目,而owner是與默認 Django User模型相關的外鍵。 同樣的方法適用於關聯相同的其他視圖和模型。 但在這里我得到這個錯誤:

Exception Type:     TypeError
Exception Value:    

Field 'id' expected a number but got <django.db.models.fields.related.ForeignKey: owner>.

這是我的模型:

class User(AbstractUser):
    pass

""" ... """

class Item(TimeStampMixin):
    title = models.CharField(max_length=40)
    owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="Items")
    last_bidder = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="bidded_objects", default=owner)
    etc=etc...

這是我的看法:

class Form_New_Item(ModelForm):
    class Meta:
        model = Item
        fields = ['title', 'description', 'price', 'category', 'image_url']

def create_new_item(request):
    if request.user.is_authenticated and request.method == "POST":
        form = Form_New_Item(request.POST)
        user = request.user
        if form.is_valid():
            new_item = Item(
                owner=user,
                title=form.cleaned_data['title'],
                etc=etc...,
            )
            new_item.save()
            return HttpResponseRedirect(reverse("index"))

請注意,當我調用new_item.save()時會發生錯誤:

提前感謝您為我提供的任何幫助。

我剛剛解決了它,我應該在示例中提供整個 Item 類,對此感到抱歉(我只是編輯了第一條消息),現在我更清楚地看到了錯誤在哪里:

我有一個依賴於另一個屬性的類的屬性。

owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="listings")
last_bidder = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="bidded_objects", default=owner)

因此,您會看到第二個屬性last_bidder默認具有第一個owner

盡管錯誤 Django 報告似乎與owner財產有關,但問題出在last_bidder之一。

我通過設置null=True而不是第一個屬性的默認值來解決它:

last_bidder = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="bidded_objects", null=True)

TypeError:字段“id”需要一個數字但得到了<django.db.models.fields.related_descriptors< div><div id="text_translate"><p> 我有一個簡單的視圖,用於顯示根據請求數據的用戶類型有條件地過濾的所有當前用戶。</p><p> 模型.py</p><pre> class User(AbstractBaseUser, PermissionsMixin): class SEX(models.TextChoices): MALE = "MALE", "Male" FEMALE = "FEMALE", "Female" class TYPES(models.TextChoices): ... type = models.CharField( _("User Type"), max_length=50, choices=TYPES.choices, default=None, blank=True, null=True) sex = models.CharField( _("Sex Type"), max_length=50, choices=SEX.choices, default=None, blank=True, null=True) email = models.EmailField( _("Your Email"), max_length=254, unique=True, default=None, blank=True, null=True) student_id = models.CharField( _("student id"), unique=True, max_length=10, blank=True, null=True) firstname = models.CharField(max_length=250, blank=False, null=True) middlename = models.CharField(max_length=250, blank=True, null=True) lastname = models.CharField(max_length=250, blank=False, null=True) # grade = models.ForeignKey(Grade, verbose_name=_( # "grade"), on_delete=models.CASCADE, blank=True, null=True) room = models.ForeignKey(Class, verbose_name=_( "class"), on_delete=models.CASCADE, blank=True, null=True) phone = models.CharField( _("phone number"), max_length=13, blank=True, null=True) age = IntegerRangeField(min_value=1, max_value=99, default=25, blank=True, null=True) owns = models.ManyToManyField(School, verbose_name=_( "School_owner"), related_name='Schoolowner', blank=True) workes = models.ForeignKey(School, verbose_name=_( "School_workes"), related_name='Schoolworkes', on_delete=models.SET_NULL, blank=True, null=True) learns = models.ForeignKey(School, verbose_name=_( "School_learns"), related_name='Schoollearns', on_delete=models.SET_NULL, blank=True, null=True) image = models.ImageField( _("photo"), upload_to='user/pp', max_length=None, blank=False, null=True) joined_date = models.DateTimeField( _("created at"), auto_now=False, auto_now_add=True) is_active = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) last_login = models.DateTimeField( _("last login"), auto_now=True, auto_now_add=False)</pre><p> <strong>序列化器.py</strong></p><pre> class MyAccountSerializer(serializers.ModelSerializer): image = serializers.ImageField() class Meta: model = User fields = ['id', 'sex', 'type', 'phone', 'image', 'email', 'student_id', 'firstname', 'middlename', 'lastname', 'image', 'joined_date', 'is_active', 'is_superuser', 'is_staff', 'last_login']</pre><p> <strong>視圖.py</strong></p><pre> class TeacherList(generics.ListAPIView): permission_classes = [IsAuthenticated, ] serializer_class = ListUsersSerializer queryset = User.objects.filter(type=User.TYPES.TEACHER)</pre><p> <em>像這樣的簡單過濾器沒有任何錯誤,但因為我需要根據請求用戶過濾響應</em></p><p>這就是我想用的</p><pre>class TeacherList(generics.ListAPIView): permission_classes = [IsAuthenticated, ] serializer_class = ListUsersSerializer # queryset = User.objects.filter(type=User.TYPES.TEACHER) def get_queryset(self): request = self.request.user if request.type == User.TYPES.OWNER: queryset = User.objects.filter( type=User.TYPES.TEACHER, workes=request.owns) elif request.type in [User.TYPES.STAFF, User.TYPES.DIRECTOR, User.TYPES.VICE_DIR]: queryset = User.objects.filter( type=User.TYPES.TEACHER, workes=request.workes) return queryset</pre><p> <strong>然而,這向我展示了一個如下所示的錯誤:</strong></p><pre> Field 'id' expected a number but got <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager object at 0x0000019D64AE7D60>.</pre><p> 我懷疑它與我有一個名為 owns 的多對多字段有關,這是我用來在其中一種情況下進行過濾的字段,但不知道為什么會拋出錯誤</p></div></django.db.models.fields.related_descriptors<>

[英]TypeError: Field 'id' expected a number but got <django.db.models.fields.related_descriptors

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 TypeError:字段“id”需要一個數字但得到了<django.db.models.fields.related_descriptors< div><div id="text_translate"><p> 我有一個簡單的視圖,用於顯示根據請求數據的用戶類型有條件地過濾的所有當前用戶。</p><p> 模型.py</p><pre> class User(AbstractBaseUser, PermissionsMixin): class SEX(models.TextChoices): MALE = "MALE", "Male" FEMALE = "FEMALE", "Female" class TYPES(models.TextChoices): ... type = models.CharField( _("User Type"), max_length=50, choices=TYPES.choices, default=None, blank=True, null=True) sex = models.CharField( _("Sex Type"), max_length=50, choices=SEX.choices, default=None, blank=True, null=True) email = models.EmailField( _("Your Email"), max_length=254, unique=True, default=None, blank=True, null=True) student_id = models.CharField( _("student id"), unique=True, max_length=10, blank=True, null=True) firstname = models.CharField(max_length=250, blank=False, null=True) middlename = models.CharField(max_length=250, blank=True, null=True) lastname = models.CharField(max_length=250, blank=False, null=True) # grade = models.ForeignKey(Grade, verbose_name=_( # "grade"), on_delete=models.CASCADE, blank=True, null=True) room = models.ForeignKey(Class, verbose_name=_( "class"), on_delete=models.CASCADE, blank=True, null=True) phone = models.CharField( _("phone number"), max_length=13, blank=True, null=True) age = IntegerRangeField(min_value=1, max_value=99, default=25, blank=True, null=True) owns = models.ManyToManyField(School, verbose_name=_( "School_owner"), related_name='Schoolowner', blank=True) workes = models.ForeignKey(School, verbose_name=_( "School_workes"), related_name='Schoolworkes', on_delete=models.SET_NULL, blank=True, null=True) learns = models.ForeignKey(School, verbose_name=_( "School_learns"), related_name='Schoollearns', on_delete=models.SET_NULL, blank=True, null=True) image = models.ImageField( _("photo"), upload_to='user/pp', max_length=None, blank=False, null=True) joined_date = models.DateTimeField( _("created at"), auto_now=False, auto_now_add=True) is_active = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) last_login = models.DateTimeField( _("last login"), auto_now=True, auto_now_add=False)</pre><p> <strong>序列化器.py</strong></p><pre> class MyAccountSerializer(serializers.ModelSerializer): image = serializers.ImageField() class Meta: model = User fields = ['id', 'sex', 'type', 'phone', 'image', 'email', 'student_id', 'firstname', 'middlename', 'lastname', 'image', 'joined_date', 'is_active', 'is_superuser', 'is_staff', 'last_login']</pre><p> <strong>視圖.py</strong></p><pre> class TeacherList(generics.ListAPIView): permission_classes = [IsAuthenticated, ] serializer_class = ListUsersSerializer queryset = User.objects.filter(type=User.TYPES.TEACHER)</pre><p> <em>像這樣的簡單過濾器沒有任何錯誤,但因為我需要根據請求用戶過濾響應</em></p><p>這就是我想用的</p><pre>class TeacherList(generics.ListAPIView): permission_classes = [IsAuthenticated, ] serializer_class = ListUsersSerializer # queryset = User.objects.filter(type=User.TYPES.TEACHER) def get_queryset(self): request = self.request.user if request.type == User.TYPES.OWNER: queryset = User.objects.filter( type=User.TYPES.TEACHER, workes=request.owns) elif request.type in [User.TYPES.STAFF, User.TYPES.DIRECTOR, User.TYPES.VICE_DIR]: queryset = User.objects.filter( type=User.TYPES.TEACHER, workes=request.workes) return queryset</pre><p> <strong>然而,這向我展示了一個如下所示的錯誤:</strong></p><pre> Field 'id' expected a number but got <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager object at 0x0000019D64AE7D60>.</pre><p> 我懷疑它與我有一個名為 owns 的多對多字段有關,這是我用來在其中一種情況下進行過濾的字段,但不知道為什么會拋出錯誤</p></div></django.db.models.fields.related_descriptors<> 類型錯誤在...<django.db.models.fields.related.ForeignKey> 不是 JSON 可序列化的 django:如果模型具有相關模型(ForeignKey),則顯示主模型窗體中的字段 Django ForeignKey TypeError only in migrations (Field "id" expected a number but got<model instance> ")</model> 為數據庫視圖相關的模型創建基本的Django模型類,並將所有ForeignKey字段設置為on_delete = DO_NOTHING 字段“id”需要一個數字但得到“std1”,我如何獲取 Model 字段的 ForeignKey ID 以在 Django 表單中使用? Django:以表格形式添加相關模型(ForeignKey)的字段 從 django.db.models.fields.related.ForeignKey 獲取相關對象 類型錯誤:字段“id”需要一個數字,但得到了 Django 型號:字段“id”需要一個數字但得到“學生”
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM