python - 尝试根据登录用户的用户名创建模型对象时出现 ValueError
问题描述
目标
我正在尝试创建一个将字段设置为登录的用户名的Alarm
对象。user
User
这个问题与我最近提出的另一个问题相同。但是,我重组了models.py,user=self.request.user.username
现在返回了下面所述的错误。
尽管我现在使用的是 Django 的默认 User 模型,但self.request.user.username
无法正常工作的原因是因为我没有设置AUTH_USER_MODEL
吗?
错误
ValueError: Cannot assign "'sam_jones'": "Alarm.user" must be a "User" instance.
代码
模型.py
class Alarm(models.Model):
""" Model representing each Alarm """
alarm_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.OneToOneField(User, on_delete=models.CASCADE)
timezone = models.CharField(max_length=30)
city = models.CharField(max_length=30)
country = models.CharField(max_length=30)
time = models.DateTimeField()
temp_conditional = models.BooleanField()
surf_conditional = models.BooleanField()
temp_max = models.FloatField(blank=True, null=True)
temp_min = models.FloatField(blank=True, null=True)
surf_max = models.FloatField(blank=True, null=True)
surf_min = models.FloatField(blank=True, null=True)
def __str__(self):
return str(self.alarm_id)
视图.py
class AlarmCreateView(LoginRequiredMixin, CreateView):
""" CreateView for User to create the Alarm object """
model = Alarm
...
def form_valid(self, form):
self.get_user_location(request, form)
return super().form_valid(form)
def get_user_location(self, request, form):
""" Function to get Profile's location from IP and create Alarm object """
...
alarm_object = Alarm.objects.create(
alarm_id=uuid.uuid4(),
user=self.request.user.username,
...
)
alarm_object.save()
解决方案
您必须提供User实例,该实例在request.user
属性上可用。所以试试这个
alarm_object = Alarm.objects.create(
alarm_id=uuid.uuid4(),
user=self.request.user,
...
)
你也可以通过引用他们来做到这一点
id
,
alarm_object = Alarm.objects.create(
alarm_id=uuid.uuid4(),
user=self.request.user.id,
...
)
UNIQUE constraint failed
引发异常是因为您将user
字段定义OneToOneField
为User
模型,这意味着对于每个Alarm
实例都与ATMOST 一个 User相关。
推荐阅读
- apache-spark - 如何利用 Parquet 分区在 Spark 中加载 RDD?
- nsis - 比较“已安装版本”与“待安装版本”
- c# - Kinovea 应用程序 | 桌面应用程序发送退出代码 0
- python - 使用 SciPy 的 signal.savgol_filter 计算的 Savitzky-Golay 导数需要缩放吗?
- c# - 安装后,WindowsService能否从同一台机器上存在的文件中读取数据
- matlab - 如何在matlab中用最后两点的斜率扩展绘图?
- c# - 使用 C# 中的特定单词拆分文件
- java - 将 RxJava 用于带有 WebSockets 的请求响应层
- unity3d - Unity 纹理未保存,纹理未正确显示
- php - Laravel 5.4 xampp localhost Mysql 自动停止