有一个Django模型Item
和一个AbstarctUser itemOwner
。创建itemOwner
后,我需要创建相应的item
。 Item
和ItemOwner
的观点和模型如下所示:
class ItemOwner(AbstractUser):
owner_name = models.CharField(max_length=64, null=True, blank=True)
item = models.ForeignKey(Item, related_name='owner',null=True)
class ItemOwnerViewSet(viewsets.ModelViewSet):
queryset = ItemOwner.objects.all()
serializer_class = ItemOwnerSerializer
class Item(models.Model):
name = models.CharField(max_length=64, verbose_name='name')
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
需要使用已作为创建Item
的参数传递的值创建 ItemOwner
。我知道可以使用modelname.save("parameters")
创建模型。但是这里的参数是从请求中访问的,我不知道我应该从哪里使用ViewSet获取请求实例。我正在寻找的是一种仅在创建ItemOwner
时才会调用的方法,并且此方法应该有一个request
实例来检索参数,以便我可以创建Item
用它模型。我该怎么办?
答案 0 :(得分:0)
您可以将post_signal
添加到ItemOwner
模型。创建对象后,您可以轻松创建Item对象。
<强> models.py 强>
from django.db.models.signals import post_save
from django.dispatch import receiver
--- Your Models here ---
# method for updating
@receiver(post_save, sender=ItemOwner)
def create_item(sender, instance, **kwargs):
item_obj = Item.objects.get_or_create(name=instance.owner_name)
instance.item = item_obj
instance.save()
更新
class ItemOwnerViewSet(viewsets.ModelViewSet):
queryset = ItemOwner.objects.all()
serializer_class = ItemOwnerSerializer
def perform_create(self, serializer):
serializer.save(item=Item.objects.get_or_create(name=self.request.data.get('name'))