DataError at /admin/message/messages/add/ django rest framew



你好,我正在学习如何在django rest框架中添加聊天功能在这里:

https://steemit.com/utopian-io/@ajmaln part-1-creating-a-simple-chat-app-with-djangorestframework

但是当我在管理面板中创建消息时它会出现

DataError at /admin/message/messages/add/
invalid input syntax for type integer: "test1"
LINE 1: ...me_id", "time", "seen", "timestamp") VALUES ('o', 'test1', '...

我遵循了整个教程,但不是使用id作为pk,而是使用我的用户名列,这是一个主键

如果你需要更多的数据请告诉我

有什么我错过了吗?

class Users(AbstractBaseUser):
options = (
('united kingdom', 'United Kingdom'),
('uk', 'UK'),
)
email = models.EmailField(verbose_name='email', max_length=60, unique=True)
first_name = models.CharField(max_length=250, unique=False)
last_name = models.CharField(max_length=250, unique=False)
username = models.CharField(max_length=50, unique=True, primary_key=True)
password = models.CharField(max_length=300, unique=False)
birthday = models.DateField(auto_now_add=False, blank=False)
seller = models.BooleanField(default=False)
terms_confirmed = models.BooleanField(default=False)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True, blank=False)
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
longitude = models.DecimalField(decimal_places=15, max_digits=17, null=True)
latitude = models.DecimalField(decimal_places=15, max_digits=17, null=True)
postcode = models.CharField(max_length=7, null=False)
country = models.CharField(max_length=40, choices=options)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['username', 'password', 'first_name', 'last_name', 'email', 'birthday', 'id']
@property
def distance(self, lat_a, long_a, lat_b, long_b):
EARTH_RADIUS_IN_MILES = 3958.761
"""all angles in degrees, result in miles"""
lat_ab = radians(lat_a)
lat_b = radians(lat_b)
delta_long = radians(long_a - long_b)
cos_x = (
sin(lat_ab) * sin(lat_b) +
cos(lat_ab) * cos(lat_b) * cos(delta_long)
)
return acos(cos_x) * EARTH_RADIUS_IN_MILES

objects = MyUserManager()

def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return self.is_staff

这是一点猜测,但我看到"...me_id"在调试SQL输出可能展开到username_id。这就解释了错误,因为你的应用确实将字符串映射为需要整数的字段。

可能您没有运行迁移,即./manage.py makemigrations && ./manage.py migrate

这意味着python代码从消息到用户看到ForeignKey,并且知道它映射到它的主键,从python的角度来看是username,所以它提供了用户名作为User类的主键字段,我假设是"test1"。但是,迁移还没有运行,所以从数据库的角度来看,主键是id。这就是为什么不匹配会发生

如果运行迁移不能解决您的问题,请提供User和Message的模型以及不截断的完整调试语句。

最新更新