小编enn*_*oma的帖子

django-rest-framework:无法调用`.is_valid()`,因为在实例化序列化器实例时没有传递`data =`关键字参数

我有以下型号:

class NoteCategory(models.Model):
    title = models.CharField(max_length=100, unique=True)

    def __unicode__(self):
        return '{}'.format(self.title)

class PatientNote(models.Model):
    category = models.ForeignKey(NoteCategory)
    patient = models.ForeignKey(Patient)
    description = models.CharField(max_length=500)
    created_at = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return '{}'.format(self.description)
Run Code Online (Sandbox Code Playgroud)

以下序列化器:

class PatientNoteSerializer(serializers.ModelSerializer):
    class Meta:
        model = PatientNote
Run Code Online (Sandbox Code Playgroud)

我只想在PatientNote上发布一个帖子.GET工作以及其他模型上的POST正常工作:

class PatientNoteViewSet(APIView):
    queryset = PatientNote.objects.all()


    def post(self, request, format=None):
        if not request.auth:
            return Response({})
        token = Token.objects.filter(key=request.auth)[0]
        user = token.user

        serializer = PatientNoteSerializer(request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

request.data是一个QueryDict,即

<QueryDict: {u'category': [u'1'], u'patient': [u'1'], u'description': [u'da rest']}>
Run Code Online (Sandbox Code Playgroud)

它可以通过他们的ID填充两个FK,患者和类别,描述是一个简单的文本. …

python django post django-rest-framework

14
推荐指数
1
解决办法
1万
查看次数

ValueError:无法在OneToOneField关系上分配User:issue

OneToOneField我面临一个非常奇怪的问题.我有一个非常简单的模型

class Doctor(models.Model):
    user = models.OneToOneField(User)
Run Code Online (Sandbox Code Playgroud)

问题在于迁移中的方法RunPython.我写了一个取决于0001_initial的0002_addusers迁移,代码如下:

class Migration(migrations.Migration):
    def create_users(apps, schema_editor):
        u = User.objects.create_superuser('admin', 'admin@aaa.com', 'admin')
        u.save()

        du = User.objects.create_user(username='doc01', password='doc01')
        du.save()

def create_doctors(apps, schema_editor):
    Doctor = apps.get_model('custom_user', 'Doctor')
    du = User.objects.get(username='doc01')

    d = Doctor(user=du)
    d.save()

dependencies = [
    ('custom_user', '0001_initial')
]

operations = [
    migrations.RunPython(create_users),
    migrations.RunPython(create_doctors),
]
Run Code Online (Sandbox Code Playgroud)

对我来说真正奇怪的是,这个非常简单的代码在视图中工作,在shell中工作,除了在迁移中工作在任何地方:)

追溯如下:

line 23, in create_doctors
d = Doctor(user=du)
...
ValueError: Cannot assign "<User: doc01>": "Doctor.user" must be a "User" instance.
Run Code Online (Sandbox Code Playgroud)

非常感谢您的支持!

编辑: 我找到了解决方案.我只需要调用RunPython

migrations.RunPython(create_users,create_doctor)

正如Avinash所建议的那样,即使没有在课堂外移动功能.

似乎后续函数必须作为单个RunPython调用的参数调用.

python django

5
推荐指数
1
解决办法
571
查看次数

标签 统计

django ×2

python ×2

django-rest-framework ×1

post ×1