2017-12-08 11 views
0

生年月日テーブルのユーザーモデルに1対1のフィールドがあります。 APIを完了し、それは私のウィンドウ8.1のラップトップで完全に動作します。だから私はMacの本である私の友人のラップトップに送る、彼は詳細を入力マイグレーションを行うが、彼はこのエラーを代わりに持っています。Django rest framework割り当てできません。Macのインスタンスエラーである必要があります

1:ValueError: "1"を割り当てることはできません: "BirthRecord2.userId"は "MyUser"インスタンスでなければなりません。

2:「1」を割​​り当てることはできません。「BirthRecord2.userId」は「MyUser」インスタンスでなければなりません。

私のラップトップでは、BirthRecordのuserIdフィールドにドロップダウンリストが表示され、ユーザーのリストが表示されます。しかし、私の友人のMacbookでは、それは既存のユーザーのドロップダウンを持っていないし、ドロップダウンの矢印を横に持っていません。

これは私のラップトップで示した方法です:https://imgur.com/a/n22DW

は、今私はそれもテーブルを削除し、再作成した後、私のラップトップ上で正常に動作などの問題が何であるかわかりませんよ。それとも、MacBookの問題ですか?

models.py

class MyUser(AbstractUser): 
    userId = models.AutoField(primary_key=True) 
    gender = models.CharField(max_length=6, blank=True, null=True) 
    nric = models.CharField(max_length=9, blank=True, null=True) 

    def __str__(self): 
     return self.username 


class BirthRecord(models.Model): 
    userId = models.OneToOneField(MyUser, to_field='userId', on_delete=models.CASCADE, primary_key=True) 
    durOfGes = models.CharField(max_length=100,blank=True,null=True) 
    modeOfDelivery = models.CharField(max_length = 100, blank = True, null= True) 
    weightAtBirth = models.FloatField(blank = True, null= True) 
    heightAtBirth = models.FloatField(blank = True, null= True) 
    headCirAtBirth = models.FloatField(blank = True, null= True) 

serializer.py

class MyUserSerializer(serializers.ModelSerializer): 
    valid_time_formats = ['%H:%M', '%I:%M%p', '%I:%M %p'] 
    birthTime = serializers.TimeField(format='%I:%M %p', input_formats=valid_time_formats, allow_null=True, required=False) 

    class Meta: 
     model = MyUser 
     fields = ('userId', 'username', 'email', 'first_name', 'last_name', 'gender', 'nric',) 
     read_only_fields = ('userId',) 
     # extra_kwargs = {"password": {"write_only": True}} 

    def update(self, instance, validated_data): 
     for attr, value in validated_data.items(): 
      if attr == 'password': 
       instance.set_password(value) 
      else: 
       setattr(instance, attr, value) 
     instance.save() 
     return instance 

class BirthRecordSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = BirthRecord 
     fields = ('userId', 'durOfGes', 'modeOfDelivery', 'weightAtBirth', 'heightAtBirth', 'headCirAtBirth') 

views.py

: は

はここに私のコードです助けてください私のより読みやすいため

class MyUserViewSet(viewsets.ModelViewSet): 
    permission_classes = [AllowAny] 
    queryset = MyUser.objects.all() 
    serializer_class = MyUserSerializer 
    filter_backends = (filters.SearchFilter,) 
    search_fields = ('=userId', 'username', 'email', 'first_name', 'last_name') 

class BirthRecordViewSet(viewsets.ModelViewSet): 
    permission_classes = [AllowAny] 
    queryset = BirthRecord.objects.all() 
    serializer_class = BirthRecordSerializer 

答えて

0

次のようになります。

def update(self, instance, validated_data): 
    password = validated_data.pop('password', None) 
    if password: 
     instance.set_password(password) 
    return super(MyUserSerializer, self).update(instance, validated_data) 
関連する問題