Ali Rn
Ali Rn

Reputation: 1214

How can we pass another field to Create Model Mixin?

Model:

class ShopItem(models.Model):
    id              = models.AutoField(db_column='ID', primary_key=True)
    name            = models.CharField(db_column='Name', max_length=255)
    price           = models.IntegerField(db_column='Price', default=0)
    description     = models.CharField(db_column='Description', max_length=63)
    seller_id       = models.ForeignKey(Seller, models.DO_NOTHING, db_column='SellerID')

View:

class SellerItemAPIView(GenericAPIView, ListModelMixin, CreateModelMixin, UpdateModelMixin):
    serializer_class = ShopItemSerializer
    permission_classes = [AllowAny]
    
    def get_seller(self, *args, **kwargs):
        phone_number    = self.kwargs.get('phone_number')
        seller          = Seller.objects.filter(Q(user_id__phone_number=phone_number))[0]
        return seller

    def post(self, request):
        seller = self.get_seller()
        return self.create(request, seller_id=seller.id)

Is there any way to use this Creat method with another field?

It now give me this error:

{
    "seller_id": [
        "This field is required."
    ]
}

Upvotes: 1

Views: 287

Answers (1)

Pouya Farahany
Pouya Farahany

Reputation: 28

you can add the seller_id to your request.data before calling self.create like this:

seller = Seller.objects.get(user_id=self.request.user.id)
if request.data = {}:
    request.data.update(seller_id=seller)
else:
    try:
        if not request.data._mutable:
            request.data._mutable = True
        request.data.update(seller_id=seller)
    except:
        request.data.update(seller_id=seller)

Upvotes: 1

Related Questions