我在添加一对时收到此错误。
无法指定"'1'":“Pair.exchange“必须是“Exchange”示例。
models.py:
class Exchange(models.Model):
name = models.CharField(max_length=25)
def __str__(self) -> str:
return f'{self.name}'
class Pair(models.Model):
symbol = models.CharField(max_length=20)
ask = models.FloatField()
bid = models.FloatField()
exchange = models.ForeignKey(Exchange, on_delete=models.PROTECT)
created = models.DateTimeField()
def __str__(self) -> str:
return f'ID: {self.id} Symbol: {self.symbol} Ask: {self.ask} Bid: {self.bid} Exchange: {self.exchange}'
views.py:
def show_pair(request):
pairs = Pair.objects.all()
br = [str(pair) + '<br>' for pair in pairs]
return HttpResponse(br)
def add_pair(request, symbol, ask, bid, exchange):
pair = Pair.objects.create(symbol=symbol, ask=ask, bid=bid, exchange=exchange)
return HttpResponsePermanentRedirect('/pair/')
urls.py:
path('pair/add/<symbol>/<ask>/<bid>/<exchange>/', views.add_pair)
我尝试通过链接添加配对,但收到此错误,可能是什么问题?
2条答案
按热度按时间tjvv9vkg1#
正如错误所指出的,您不能只传递“Exchange”模型的id,还必须传递模型的示例。
选项1:获取模型示例并传递它
选项2:当你在你的模型上创建一个
ForeignKey
字段时,django实际上会创建一个名为exchange_id
的数据库列,所以你也可以用它来创建你的“配对”。作为一个额外的好处,你可能想添加一些验证你收到的交换ID是正确的,例如你可以使用django的
get_object_or_404
。bvk5enib2#
正如错误所述,您需要提供一个
Exchange
对象,但直接传递exhange_id
会更高效:你可能不应该使用永久重定向,因为这样浏览器下次就不会触发这个逻辑,而是直接访问重定向。
注意:GET请求 * 不 * 应该有 * 副作用 *,因此当用户发出GET请求时构造对象不符合HTTP标准。因此,最好将其转换为POST请求。