【发布时间】:2020-07-26 19:34:43
【问题描述】:
我对 Django 和 Rest Framework 非常陌生。所以我相信你们能帮我解决我的问题。我在 Python 2.7 和 Django 1.11 上。
我的模型 -
class Item(models.Model):
title = models.CharField(max_length=140)
user = models.ForeignKey(User)
created_date = models.DateTimeField(auto_now_add=True)
due_date = models.DateTimeField(blank=True, null=True)
completed = models.BooleanField()
completed_date = models.DateTimeField(blank=True, null=True)
def save(self,force_insert=False, force_update=False):
i = datetime.datetime.now(pytz.utc)
in_tz = pytz.timezone("Asia/Calcutta")
i = i.astimezone(in_tz)
# If Item is being marked complete, set the completed_date
if self.completed:
self.completed_date = i
super(Item, self).save(force_insert, force_update)
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30, null=True, blank=True)
last_name = models.CharField(max_length=30, null=True, blank=True)
... ... ...
我正在尝试向 Item 模型发布一条记录,该模型应从请求标头获取用户电子邮件,并应为该特定记录创建外键关系。
我的 Item 模型序列化器-
class ItemSerializer(serializers.ModelSerializer):
user = serializers.RelatedField(source='User',read_only=True)
class Meta:
model = Item
fields = '__all__'
我的项目模型视图集 -
class ItemViewset(viewsets.ModelViewSet):
serializer_class = ItemSerializer
queryset = Item.objects.all()
def perform_create(self, serializer):
print 'Im in here', self.request.user
user_id = User.objects.get(email=self.request.user)
serializer.save(user= user_id)
我在 StackOverflow 上查看了一些博客和其他问题,并达到了这一点。
现在,当我尝试发布记录时,出现如下所示的 TypeError
Got a `TypeError` when calling `Item.objects.create()`.
This may be because you have a writable field on the serializer class that is not a valid argument to `Item.objects.create()`.
You may need to make the field read-only, or override the ItemSerializer.create() method to handle this correctly.
Original exception was:
Traceback (most recent call last):
File "/../env/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 943, in create
instance = ModelClass._default_manager.create(**validated_data)
File "/../env/local/lib/python2.7/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/../env/local/lib/python2.7/site-packages/django/db/models/query.py", line 394, in create
obj.save(force_insert=True, using=self.db)
TypeError: save() got an unexpected keyword argument 'force_insert'
请帮助我为我的用例解决此问题。我没时间完成这项工作。
非常感谢。
【问题讨论】:
标签: django python-2.7 django-rest-framework