Django:创建一个创建用户的模型

时间:2017-07-17 07:13:49

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

有一个Django模型Item和一个AbstarctUser itemOwner。创建itemOwner后,我需要创建相应的itemItemItemOwner的观点和模型如下所示:

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用它模型。我该怎么办?

1 个答案:

答案 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'))