2017-07-17 87 views
-3

有一個Django模型Item和一個AbstarctUser itemOwner。創建itemOwner後,我需要創建相應的item。的ItemItemOwner的意見和模型,如下圖所示:Django:創建用戶模型

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

的是,在'ItemOwnerViewSet'查詢集一個錯字?爲什麼您想在ItemOwner創建後訪問請求?我猜項目只有一個字段是「'名稱」,糾正我,如果我錯了owner_name等於Item.name權利?所以你可以爲ItemOwner創建一個post_signal並創建'Item'? –

+0

owner_name不是項目名稱。兩者都不同。而且我對django很陌生,並且不清楚post_signal和所有的作品。 plz讓我看看代碼 –

+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')) 
+0

name = instance.owner_name ,.這是錯誤的。 name是將在請求中傳遞的另一個字段。 –

+0

是的,我沒有你的請求清晰的圖片。請詳細說明你的問題。在這種情況下,這個信號是無效的。 –

+0

告訴您如何在請求中添加額外字段。可能會顯示您的完整序列化程序將幫助 –