错误消息 AttributeError:'NoneType‘对象没有属性'add’
我正在尝试创建一个模型的实例。card模型应该是患者模型的一个实例,并且患者模型与用户模型有一个外键关系。就像一个病人在医院里有一张卡片。
我的错误来自于perform_create方法
views.py
class PatientCardListAPIView(ListCreateAPIView):
serializer_class = PatientsCardSerializer
queryset = Card.objects.all()
permission_classes = (permissions.IsAuthenticated, IsOwner, )
def perform_create(self, serializer):
serializer.save()
serializer.instance.owner.add(self.request.user)models.py
from django.db import models
from authentication.models import User
# Create your models here.
class Patient(models.Model):
name = models.CharField(max_length=255, null=True)
country = models.CharField(max_length=255, null=True)
state = models.CharField(max_length=255, null=True)
phone = models.CharField(max_length=255, null=True)
email = models.CharField(max_length=255, null=True)
owner = models.ForeignKey(to=User, null=True, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Card(models.Model):
name = models.CharField(max_length=255, null=True)
card_number = models.CharField(max_length=255, null=True)
owner = models.OneToOneField(Patient, null=True, blank=True, on_delete=models.CASCADE)
def __str__(self):
return self.name发布于 2020-09-07 19:26:09
这应该是:
def perform_create(self, serializer):
model_instance = serializer.save(owner=self.request.user)或
def perform_create(self, serializer):
model_instance = serializer.save()
model_instance.owner = self.request.user编辑的.仔细看看您的模型,就会发现您需要重新定义模型。正如您所定义的,Patient类下的owner字段指示您可以有一个用户可以是多个病人.(查询:patient=Patient.objects.get(owner=self.request.user)可能返回多个实例。)。建议的模式应是:
class Patient(models.Model):
name = models.CharField(max_length=255, null=True)
country = models.CharField(max_length=255, null=True)
state = models.CharField(max_length=255, null=True)
phone = models.CharField(max_length=255, null=True)
email = models.CharField(max_length=255, null=True)
**owner = models.OneToOneField(User, null=True)**
def __str__(self):
return self.name
class Card(models.Model):
name = models.CharField(max_length=255, null=True)
card_number = models.CharField(max_length=255, null=True)
owner = models.OneToOneField(Patient, null=True, blank=True, on_delete=models.CASCADE)
def __str__(self):
return self.name然后你就可以有自己的观点了:
class PatientCardListAPIView(ListCreateAPIView):
serializer_class = PatientsCardSerializer
queryset = Card.objects.all()
permission_classes = (permissions.IsAuthenticated, IsOwner, )
def perform_create(self, serializer):
card_instance = serializer.save()
patient = Patient.objects.get(owner=self.request.user)
card_instance.owner = patient发布于 2020-09-08 02:55:21
我在过去的24小时里几乎因为这个问题而对编程感到气馁,但是这个社区帮助了我,尽管他们没有给出我所需要的答案,他们让我自己发现了答案,我说谢谢stackoverflow社区.
解决了,我终于发现了我做错了什么。卡片不仅是病人的,也是医院的,所以卡片需要与医院和病人的关系。
models.py
class Patient(models.Model):
name = models.CharField(max_length=255, null=True)
country = models.CharField(max_length=255, null=True)
state = models.CharField(max_length=255, null=True)
phone = models.CharField(max_length=255, null=True)
email = models.CharField(max_length=255, null=True)
owner = models.ForeignKey(to=User, null=True, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Card(models.Model):
name = models.CharField(max_length=255, null=True)
card_number = models.CharField(max_length=255, null=True)
owner = models.OneToOneField(Patient, null=True, blank=True, on_delete=models.CASCADE)
hospital = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
def __str__(self):
return self.nameviews.py
class PatientCardListAPIView(ListCreateAPIView):
serializer_class = PatientsCardSerializer
queryset = Card.objects.all()
permission_classes = (permissions.IsAuthenticated, IsOwner, )
def perform_create(self, serializer):
return serializer.save(hospital=self.request.user)
def get_queryset(self):
return self.queryset.filter(hospital=self.request.user)
class PatientCardDetailAPIView(RetrieveUpdateDestroyAPIView):
serializer_class = PatientsCardSerializer
permission_classes = (permissions.IsAuthenticated, IsOwner,)
queryset = Card.objects.all()
lookup_field = "id"
def get_queryset(self):
return self.queryset.filter(hospital=self.request.user)https://stackoverflow.com/questions/63782156
复制相似问题