ich auf einem einfachen Projekt arbeite für Produkte von einer Website zu verkaufen, für die das Modell Definition lautet wie folgt:django-rest-framework: Wie man Join von Datenbankmodellen serialisiert?
class Product(models.Model):
"""
Model for Products
"""
price = models.FloatField()
description = models.TextField()
url = models.CharField(max_length=200)
def __str__(self):
return self.description
class Order(models.Model):
"""
Model for Orders
"""
UNPAID = 0
PAID = 1
FAILED = 2
STATUS = (
(UNPAID, 'UNPAID'),
(PAID, 'PAID'),
(FAILED, 'FAILED'),
)
user = models.ForeignKey(User)
product = models.ForeignKey(Product)
orderdate = models.DateTimeField()
token = models.CharField(max_length=30)
paymentstatus = models.IntegerField(choices=STATUS)
Entsprechend den Serializer definiert sind, wie folgend:
class ProductSerializer(serializers.ModelSerializer):
"""
Serialize Product list
"""
class Meta:
"""
Metadata for Product Serializationt to expose API
"""
model = Product
fields = ('id', 'price', 'description', 'url')
class OrderSerializer(serializers.ModelSerializer):
"""
Serialize Order of Product
"""
class Meta:
"""
Order metadata
"""
model = Order
fields = ('id', 'user', 'orderdate', 'token', 'paymentstatus',
'product')
class OrderDetailSerializer(serializers.ModelSerializer):
"""
Serialize Order Details
"""
product = ProductSerializer(read_only=True)
class Meta:
"""
Order metadata
"""
model = Order
fields = ('id', 'user', 'orderdate', 'paymentstatus', 'product')
Im obigen Beispiel , ist es möglich, OrderSerializer
und OrderDetailsSerializer
zu einem einzigen Serialisierer zu kombinieren?
Ich verwende die OrderSerializer
, wenn der Benutzer eine neue Order
legt, d. H. Schreibt in die Datenbank und OrderDetailSerializer
, um die Details einer Bestellung aus der Datenbank abzurufen.
hilft ich glaube, Sie 'OrderDetailSerializer' für beide Fälle können, warum erstellen Sie eine andere Serializer' OrderSerializer '? – Enix
Ist ein "Sub-Dictionary" in Ordnung? Wenn dies der Fall ist, können Sie Ihrem OrderSerializer 'detail = OrderDetailSerializer' hinzufügen und nur' detail' zu Ihren Feldern hinzufügen. –
@Enix, weil in 'OrderDetailSerializer' die' read_only = True' oder 'querieset' benötigt wird, bin ich etwas verwirrt über ihre Verwendung und daher diesen Beitrag. Ich möchte auch nicht das 'token' zum Benutzer auf get Anfrage zeigen, daher verschiedene serialzier – bawejakunal