【问题标题】:how to add current active user as foreign key to the create post model in djangorestframework?如何将当前活动用户作为外键添加到 djangorestframework 中的创建帖子模型?
【发布时间】:2021-01-07 07:42:22
【问题描述】:

如何将当前活跃用户作为外键添加到 djangorestframework 中的 create post 模型中?

型号:

class DoctorProfile(AbstractBaseUser, PermissionsMixin):
    id=models.AutoField(primary_key=True)
    name = models.CharField(_('name'), max_length=50, blank=True)
    mobile = models.CharField(_('mobile'), unique=True, max_length=10, blank=False)
    email = models.EmailField(_('email address'), blank=True)
    password = models.CharField(_('password'),max_length=25,blank=False)
    otp = models.IntegerField(null=True, blank=True)
      
class Doctor_clinic(models.Model):
    clinic_id = models.AutoField(primary_key=True)
    doc_profile = models.ForeignKey(DoctorProfile,on_delete=models.CASCADE)
    clinic_name = models.CharField(max_length=150)
    clinic_address = models.CharField(max_length=150)
    City = models.CharField(max_length=50)
    state = models.CharField(max_length=50)
    pincode = models.IntegerField()
    

#如何在序列化程序中获取外键

我是这样写的,这样是否正确/相关?

   class UserSerializer(serializers.ModelSerializer):
        # mobile = serializers.RegexField("[0-9]{10}",min_length=10,max_length=10)
        password = serializers.CharField(write_only=True)
        email=serializers.EmailField(max_length=155,min_length=3,required=True)
        name=serializers.CharField(max_length=55,min_length=3,required=True)

        class Meta:
            model = DoctorProfile
            fields = ("name", "email", "password", "mobile","otp")

class ClinicSerializer(serializers.ModelSerializer):
    class Meta:
        model = Doctor_clinic
        fields =('clinic_name','clinic_address', 'City', 'state', 'pincode','doc_profile')

观看次数:

class ClinicRegistrationView(generics.ListCreateAPIView):
    serializer_class = ClinicSerializer
    queryset = Doctor_clinic.objects.all()
    permission_classes = (IsAuthenticated,)

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-serializer


    【解决方案1】:

    当序列化关系时,你需要根据你想要的表示定义一个单独的字段,例如像这样编写你的序列化器:

    class ClinicSerializer(serializers.ModelSerializer):
        doc_profile = serializers.StringRelatedField()
    
        class Meta:
            model = Doctor_clinic
            fields =('clinic_name','clinic_address', 'City', 'state', 'pincode','doc_profile')
    

    【讨论】:

    • 显示此错误,django.db.utils.IntegrityError: NOT NULL 约束失败:doccure_doctor_clinic.doc_profile_id
    • 这意味着您的一个诊所缺少一位医生ForeignKey,请尝试通过管理员添加并重试
    • 你能检查一下我的观点,让我知道它会好吗?
    • 您的视图看起来不错,您的数据库中已经存在的对象最有可能导致此问题,请尝试在您的 doc_profile 字段中设置 null=True Doctor_clinic
    • 数据保存成功,但是外键保存为空,如何知道是哪个用户保存数据?
    【解决方案2】:

    permissions.py

    使用权限类

    类 IsOwner(permissions.BasePermission):

     def has_object_permission(self, request, view, obj):
         return obj.doc_profile == request.user
    

    views.py

        def perform_create(self, serializer):
            return serializer.save(doc_profile=self.request.user)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-28
      • 2020-06-21
      • 2012-08-27
      • 1970-01-01
      • 2012-04-28
      • 2020-05-23
      • 2016-07-17
      • 1970-01-01
      相关资源
      最近更新 更多