【问题标题】:Why my CreateAPIView does not show Product and store category field?为什么我的 CreateAPIView 不显示产品和商店类别字段?
【发布时间】:2016-11-30 21:14:53
【问题描述】:

我正在设计一个用于列出商店和创建商店的 API。我可以列出商店,但在设计创建商店时,尽管在商店序列化程序中调用了所有产品和商店类别序列化程序,但我没有得到产品和商店类别字段。

我的缩短模型看起来像

class Merchant(models.Model):
    user = models.ForeignKey(User)
    phone = models.PositiveIntegerField(null=True,blank=True)

class Store(models.Model):
    merchant = models.ForeignKey(Merchant)
    name_of_legal_entity = models.CharField(max_length=250)

class Product(models.Model):
    store = models.ForeignKey(Store)
    image = models.ForeignKey('ProductImage',blank=True,null=True)
    name_of_product = models.CharField(max_length=120)

class ProductImage(models.Model):
    image = models.ImageField(upload_to='products/images/')

class StoreCategory(models.Model):
    product = models.ForeignKey(Product,null=True, on_delete=models.CASCADE,related_name="store_category")
    store_category = models.CharField(choices=STORE_CATEGORIES, default='GROCERY', max_length=10)

Serializer.py

class ProductImageSerializer(ModelSerializer):
    class Meta:
        model = ProductImage
        fields  =   ( 'id','imageName', )

class ProductSerializers(ModelSerializer):
    image = ProductImageSerializer(many=False,read_only=True)
    class Meta:
        model = Product
        fields=('id','image','name_of_product','description','price','active',)

class StoreCategorySerializer(ModelSerializer):
    product = ProductSerializers(read_only=True)
    class Meta:
        model = StoreCategory

class StoreSerializer(ModelSerializer):
    # url = HyperlinkedIdentityField(view_name='stores_detail_api')
    store_categories = StoreCategorySerializer(many=True) 
    merchant = MerchantSerializer(read_only=True)
    class Meta:
        model = Store
        fields=("id",
                "merchant",
                "store_categories",
                "name_of_legal_entity",
                "pan_number",
                "registered_office_address",
                "name_of_store",
                )

Views.py

class StoreCreateAPIView(CreateAPIView):
    queryset = Store.objects.all()
    serializer_class = StoreSerializer
    parser_classes = (FormParser,MultiPartParser,)

    def put(self, request, filename, format=None):
        print('first put works')
        file_obj = request.data['file']
        print ('file_obj',file_obj)
        return Response(status=204)

    def perform_create(self, serializer):
        print('then perform works')
        serializer.save(user=self.request.user) 

这是它的外观截图

为什么表格中没有显示商家、产品和商店类别?

【问题讨论】:

  • 如果您的商家ID是自动递增或自动生成的,那么它不存在是正常的。
  • 我的商家模型看起来像这个类 Merchant(models.Model): user = models.ForeignKey(User) phone = models.PositiveIntegerField(null=True,blank=True)
  • @JustinM.Ucar 我已经用商家模型更新了我的问题。它不是自动递增的,它包含用户和用户地址、电话号码等。
  • 从序列化器中移除read_only=True
  • 删除后是否有效?

标签: python django api python-3.x django-rest-framework


【解决方案1】:

从您要创建条目的序列化程序中删除 read_only=True。 喜欢:

product = ProductSerializers(read_only=True)

应该是

product = ProductSerializers()

read_only 会阻止它被写入,因此我不会出现在结果中。

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 2019-08-22
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多