【发布时间】:2020-03-18 16:32:54
【问题描述】:
我是 django 和 django rest 框架的新手,我正在尝试使用 POST 请求发送一个对象,但我不知道它为什么会失败,这些是我的模型:
class Region(models.Model):
id_region = models.AutoField(primary_key=True)
name_region = models.CharField(max_length=255)
def __str__(self):
return self.name_region
class DataTicker(models.Model):
id_data_ticker = models.AutoField(primary_key=True)
ytd = models.FloatField()
expense_ratio = models.FloatField()
price_earnings_ratio = models.FloatField()
price_book_ratio = models.FloatField()
aum_ticker = models.FloatField()
price = models.FloatField()
nav = models.FloatField()
bid_ask = models.FloatField()
premiun_discount = models.FloatField()
date= models.DateTimeField(auto_now=False)
region_id_fk = models.ForeignKey(Region,on_delete=models.CASCADE)
geography_id_fk = models.ForeignKey(Geography,on_delete=models.CASCADE)
def __str__(self):
return str(self.id_data_ticker)
class Ticker(models.Model):
id_number = models.AutoField(primary_key=True)
ticker_id = models.CharField(max_length=100)
index_tracked = models.CharField(max_length=255)
fund = models.CharField(max_length=255)
focus = models.CharField(max_length=255)
inception_date= models.DateTimeField(auto_now=False)
asset_id_fk = models.ForeignKey(AssetClass,on_delete=models.CASCADE)
data_tickers = models.ManyToManyField(DataTicker)
def __str__(self):
return self.ticker_id
这是我的序列化器
class RegionSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Region
fields = ('id_region','name_region','geography_id_fk')
class DataTickerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = DataTicker
fields = ('id_data_ticker','ytd','expense_ratio','price_earnings_ratio',
'price_book_ratio','aum_ticker','price','nav','bid_ask','premiun_discount','date','region_id_fk','geography_id_fk')
region_id_fk = serializers.SerializerMethodField('get_region_id_fk')
geography_id_fk = serializers.SerializerMethodField('get_geography_id_fk')
def get_region_id_fk(self,obj):
return obj.region_id_fk.name_region
def get_geography_id_fk(self,obj):
return obj.geography_id_fk.name_geography
class TickerSerializer(serializers.ModelSerializer):
#data_tickers = serializers.PrimaryKeyRelatedField(queryset=DataTicker.objects.all(), many=True)
data_tickers = DataTickerSerializer(many=True, read_only=True)
class Meta:
model = Ticker
fields = ('id_number','ticker_id','index_tracked','fund',
'focus','inception_date',
'asset_id_fk','data_tickers')
asset_id_fk = serializers.SerializerMethodField('get_asset_id_fk')
def get_asset_id_fk(self,obj):
return obj.asset_id_fk.name_asset
我的观点:
class RegionSViewSet(viewsets.ModelViewSet):
queryset = Region.objects.all().order_by('id_region')
serializer_class = RegionSerializer
class TickerViewSet(viewsets.ModelViewSet):
queryset = Ticker.objects.all().order_by('id_number')
serializer_class = TickerSerializer
class DataTicketViewSet(viewsets.ModelViewSet):
queryset = DataTicker.objects.all().order_by('id_data_ticker')
serializer_class = DataTickerSerializer
这是我要发送的对象:
var obj = { "ticker_id": "测试", "index_tracked": "测试", “基金”:“测试”, “焦点”:“测试”, "inception_date": "2019-11-19T19:28:16Z", “asset_id_fk”:6, “data_tickers”:[{ “id_data_ticker”:1, “年初至今”:0.126504, “费用比率”:25.0, “price_earnings_ratio”:20.257181, “price_book_ratio”:2.345986, “aum_ticker”:25290400.0, “价格”:10000.0, “导航”:11000.0, "bid_ask": 15000.0, “premiun_discount”:2000.0, “日期”:“2019-11-01T19:23:03Z”, "region_id_fk": "欧洲", "geography_id_fk": "发达的欧洲" }] }
我做错了什么? 谢谢!
【问题讨论】:
-
你必须有这样的apiview:django-rest-framework.org/tutorial/3-class-based-views
-
显示错误日志
-
请提供回溯最后一行信息
标签: python json django post django-rest-framework