我有4-5个型号如下: -
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="button" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="edit text" />
同样,我使用class Product(models.Model):
title = models.CharField(max_length=255)
short_description = models.TextField(blank=True,null=True)
video_link = models.URLField(blank=True,null=True)
price = models.IntegerField(db_index=True,blank=True,null=True)
user = models.ForeignKey(User)
@staticmethod
def get_product_details(product,category=None,image=None,comment=None,rating=None):
product_detail = {
'id' : product.id,
'title' : product.title,
'short_description' : product.short_description,
'video_link' : product.video_link,
'price' : product.price,
'user' : product.user.first_name + ' ' + product.user.last_name,
}
if category:
product_detail.update({'categories': ProductCategory.get_product_categories(product)})
if comment:
product_detail.update({'comments' : ProductComments.get_product_comments(product)})
if image:
product_detail.update({'images': ProductImages.get_product_images(product)})
if rating:
product_detail.update({'rating': ProductRating.return_data(product)})
return product_detail
class ProductCategory(models.Model):
subcategory = models.CharField(max_length=255)
product = models.ForeignKey(Product)
date = models.DateTimeField(auto_now_add=True)
@staticmethod
def get_product_categories(product):
return ProductCategory.objects.filter(product=product).values_list('subcategory',flat=True)
作为FK引用的多个模型(例如Product
,ProductImages
等),我需要从中获取数据然后集中显示在获取特定产品的数据时使用ProductComments
在Product
模型下。
因此,如果我浏览到get_product_details
,它将调用localhost:8080/product/<product_id>
,它将调用模型中的其他方法来收集get_product_details
的信息参考。
是否可以在Django-Rest-Framework中创建一个序列化程序,它将从其他序列化程序获取引用特定产品对象的数据。??
以下是我的序列化工具。
<product_id>
我期待的是这样的: -
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
class ProductCategorySerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategory
我的预期输出应采用以下格式: -
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
include_data_models = (ProductCategory,ProductImages,)
答案 0 :(得分:0)
假设您使用的是Django REST Framework v3.0 +,我建议您查看Django REST Framework Documentation on Serializer Relations。此外,您还需要在models.ForeignKey
字段中使用ForeignKey.related_name。
class Product(models.Model):
title = models.CharField(max_length=255)
short_description = models.TextField(blank=True,null=True)
video_link = models.URLField(blank=True,null=True)
price = models.IntegerField(db_index=True,blank=True,null=True)
user = models.ForeignKey(
to=User,
related_name="products",
)
...
class ProductCategory(models.Model):
subcategory = models.CharField(max_length=255)
product = models.ForeignKey(
to=Product,
related_name="categories",
)
date = models.DateTimeField(auto_now_add=True)
...
def __unicode__(self):
return self.subcategory # Tech, Books, etc.
class ProductCategorySerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategory
class ProductSerializer(serializers.ModelSerializer):
# The related_name="categories" on the ProductCategory.product
# will allow us to retrieve categories, and convert it to
# the __unicode__ equivalent.
# http://www.django-rest-framework.org/api-guide/relations/#stringrelatedfield
categories = serializers.StringRelatedField(many=True)
class Meta:
model = Product