django - (Django)如何将当前用户的用户名分配给视图中的其他模型?
问题描述
我想将Passengers模型的用户名字段分配给当前登录用户的用户名。我好像做不到。下面是代码。
模型.py
class UserProfileInfo(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
profile_pic = models.ImageField(upload_to='profile_pics',blank=True)
def __str__(self):
return self.user.username
class Passengers(models.Model):
username = models.CharField(max_length = 100)
passenger_firstname = models.CharField(max_length = 100)
passenger_lastname = models.CharField(max_length = 100)
passenger_age = models.CharField(max_length = 100)
passenger_gender = models.CharField(max_length=6, choices=GENDER_CHOICES, default='female')
来自s.py
class PassengerForm(forms.ModelForm):
class Meta():
model = Passengers
fields = (
'passenger_firstname',
'passenger_lastname',
'passenger_age',
'passenger_gender')
视图.py
def passenger_info(request):
if request.method == "POST":
passenger_details = PassengerForm(data=request.POST)
if passenger_details.is_valid():
passenger_details.username = request.user
passenger_details.save()
else:
passenger_details = PassengerForm()
return render(request,'passenger_info.html',{'passenger_details':passenger_details})
没有打印出错误消息,但它使用户名字段留空,如下所示:
解决方案
首先,这样做没有任何意义。您应该为用户模型创建一个 ForeignKey。
也request.user
将返回用户对象而不是用户名,所以如果你需要用户名,你应该调用它:request.user.username
并解决您的问题:
class Passengers(models.Model):
username = models.ForeignKey(User, null=False, blank=False)
passenger_firstname = models.CharField(max_length = 100)
passenger_lastname = models.CharField(max_length = 100)
passenger_age = models.CharField(max_length = 100)
passenger_gender = models.CharField(max_length=6, choices=GENDER_CHOICES, default='female')
您也可以从 User 模型中获取名字和姓氏。性别和年龄也应该在UserProfileInfo
模型中更有意义,Passengers
模型应该是关于将用户连接到公共汽车、飞机等而不是保存不会改变的数据。
推荐阅读
- cassandra - Cassandra 删除/更新一行并获取其先前的值
- python - 对于在 python3 中包含范围的循环
- mqtt - 禁用 mosquitto MQTT 代理的非安全连接
- android - CSS scale() 不适用于 Android Chrome 70 和其他版本
- ruby - Rake 和 Ansible 有什么区别?
- ios - 如果我没有 nstring 直接显示它,如何在 UITextView 中显示 HTML 文件?
- python - 在 Python 中实现事件处理程序
- javascript - AJAX 调用在脚本的其余部分后完成
- python-3.x - 将特定字符串更改为多维数组中的浮点数
- python - 如何使用 ssh 在远程机器上运行 python 脚本