![](/img/trans.png)
[英]How to get all fields in django rest framework which is defined as related name in a diffent model with foreign key?
[英]Django Rest Framework: How to get instance of related foreign key
注意:如果以下信息不清楚 - 請問我,我會更新並發布您需要的信息 | 對我來說很重要
在Warehouse(models.Model)
我有amount
屬性和
在ChosenProduct(models.Model)
- quantity
我正在嘗試通過chosen_products
中的 selected_products實例獲取Warehouse
中的amount
以添加App_formSerializer
的數量
但是我無法從instance
中獲取chosen_products
對象-> Out 下方:
class WarehouseSerializer(serializers.ModelSerializer):
category_name = serializers.ReadOnlyField(
source='category_product.category_name')
posted_user = serializers.ReadOnlyField(
source='posted_user.username')
class Meta:
model = Warehouse
fields = ['id', 'category_product', 'category_name', 'condition',
'product_name', 'amount', 'barcode', 'f_price', 'created_at', 'updated_at', 'posted_user']
class ChosenProductSerializer(serializers.ModelSerializer):
product_info = WarehouseSerializer(source='product', read_only=True)
period_info = Product_periodSerializer(source='period', read_only=True)
class Meta:
model = ChosenProduct
exclude = ('app_form',)
class App_formSerializer(serializers.ModelSerializer):
chosen_products = ChosenProductSerializer(many=True)
def update(self, instance, validated_data):
instance.terminated = validated_data.get('terminated', instance.terminated)
if instance.terminated == True :
print('-----------TRUE--------------------')
print(instance.chosen_products)
print('-----------PRINT--------------------')
instance.save()
return instance
class Meta:
model = App_form
fields = '__all__'
出去
-----------TRUE--------------------
creditapi.ChosenProduct.None
-----------PRINT--------------------
問題已更新
模型.py
class Warehouse(models.Model):
category_product = models.ForeignKey(
Category_product, on_delete=models.CASCADE)
product_name = models.CharField(max_length=200, unique=True)
condition = models.BooleanField(default=False)
amount = models.IntegerField()
barcode = models.BigIntegerField()
f_price = models.CharField(max_length=255, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
posted_user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
def __str__(self):
return self.product_name
class App_form(models.Model):
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,12}$', message="Phone number must be entered in the format: '998981234567'. Up to 12 digits allowed.")
terminated = models.BooleanField(default=False)
name = models.CharField(max_length=150)
phone_number = models.CharField(validators=[phone_regex], max_length=13)
def __str__(self):
return self.surname
class ChosenProduct(models.Model):
product = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
quantity = models.IntegerField()
app_form = models.ForeignKey(App_form, on_delete=models.CASCADE, related_name='chosen_products')
def __str__(self):
return self.product.product_name
如果您編寫instance.chose_products
,您將訪問manager ,而不是包含項目的QuerySet
。 您可以使用.all()
獲取包含所有對象的QuerySet
:
print(instance.chosen_products.all())
如果您反向訪問ForeignKey
,則您有一個管理器,因為零個、一個或多個元素可以引用instance
。
例如,您可以在 selected_products 上進行聚合,例如,如果您想檢索相關的chose_products
的chose_products
,您可以使用:
print(instance.chosen_products.count())
但是,我建議不要在App_form
中存儲(聚合)數據,而是在需要時聚合數據。 數據重復是一種反模式,事實證明很難保持數據同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.