Python~(fields.E304) Reverse accessor 解析

Django在定义ForeignKey的时候有时会报错

(fields.E304) Reverse accessor

class FriendList(models.Model):
    username = models.ForeignKey(User, on_delete=models.CASCADE)
    friend = models.ForeignKey(User, blank=True, on_delete=models.CASCADE)

之所以报错是因为, Django在定义ForeignKey约束时, 不仅仅会约束FriendList中的username和friend. 同时Django也会试图建立User到FriendList的backforwards relation.

即, 定义过ForeignKey后, Django会试图创建一个User.FriendList的API. 但由于FriendList中有两个Field都设置User为外键, User.FriendList就不知该返回username还是friend.

解决方法有:

  1. 指定related_name,

    class FriendList(models.Model):
        username = models.ForeignKey(User, related_name='FriendList_username', on_delete=models.CASCADE)
        friend = models.ForeignKey(User, blank=True, related_name='FriendList_friend', on_delete=models.CASCADE)
    
  2. 取消backforwards relation

    class FriendList(models.Model):
        username = models.ForeignKey(User, related_name='+', on_delete=models.CASCADE)
        friend = models.ForeignKey(User, blank=True, related_name='+', on_delete=models.CASCADE)
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Python的user agent改为手机协议头,有几种方法。 一种方法是使用"urllib"库中的"Request"类来构造并发送HTTP请求。通过在请求头中添加"User-Agent"字段并将其值设置为手机浏览器的协议头,可以模拟手机访问网页。以下是示例代码: ``` import urllib.request url = 'http://example.com' headers = {'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1'} req = urllib.request.Request(url, headers=headers) response = urllib.request.urlopen(req) html = response.read() ``` 在上述代码中,我们构造了一个名为"headers"的字典,其中包含一个名为"User-Agent"的键值对。该键的值是iPhone的User-Agent,它将被用作请求头中的"User-Agent"字段的值。然后,我们使用"Request"类创建了一个请求对象,并将该请求对象用作参数发送到"urlopen"函数中。最后,我们使用"read"函数读取响应的HTML内容。 另一种方法是使用第三方库"fake-useragent"。该库允许您获取用于模拟不同浏览器、操作系统和设备的user agent字符串。以下是示例代码: ``` from fake_useragent import UserAgent import requests url = 'http://example.com' ua = UserAgent().mobile # 设备类型 mobile / tablet / desktop headers = {'User-Agent': ua} response = requests.get(url, headers=headers) html = response.content ``` 在上面的示例中,我们首先导入"UserAgent"类,并创建一个"UserAgent"对象。然后,我们调用"UserAgent"对象的"mobile"属性,获取一个随机的手机User-Agent字符串。接下来,我们将这个字符串赋给"User-Agent"字段,并将请求发送到URL。最后,我们使用"content"属性获取响应内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值