通过django代码为一对多字段赋值
我试图为使用通过django代码为一对多字段赋值,django,sqlite,django-models,Django,Sqlite,Django Models,我试图为使用models.ForeignKey定义的数据库条目赋值。我应该如何引用引用模型中的变量 在下面的代码中,分配update_user.appoitions.requester_name=requising_user不起作用。谷歌搜索并没有帮助我找到正确的解决方案。应该如何从django/python中引用这些变量 下面是我的模型.py class AppointmentRequest(models.Model): my_name = models.TextField(defau
models.ForeignKey
定义的数据库条目赋值。我应该如何引用引用模型中的变量
在下面的代码中,分配update_user.appoitions.requester_name=requising_user
不起作用。谷歌搜索并没有帮助我找到正确的解决方案。应该如何从django/python中引用这些变量
下面是我的模型.py
class AppointmentRequest(models.Model):
my_name = models.TextField(default='')
requester_name = models.TextField(default='')
meeting_year = models.TextField(default='')
class CustomUser(AbstractUser):
firstname = models.TextField(default='')
lastname = models.TextField(default='')
appointments = models.ForeignKey(AppointmentRequest, on_delete=models.CASCADE, default='', blank=True, null=True)
我想修改约会条目的值,即我的姓名、请求者姓名等
下面是views.py中的代码
def book_appointment(request):
requesting_user = request.GET['requesting_user']
update_user = CustomUser.objects.get(username=requested_user)
update_user.appointments.requester_name = requesting_user
您可能得到的“NoneType”对象没有属性“requester\u name”的原因是update\u user.appoints可能为null
appointments = models.ForeignKey(AppointmentRequest, on_delete=models.CASCADE, default='', blank=True, null=True)
也就是说,您的ForeignKey可以为null,所以它可能会返回给您
你真正应该做的是:
if update_user.appointments:
update_user.appointments.requester_name = request.GET['requesting_user']
else:
apt_request = AppointmentRequest()
apt_request.requester_name = request.GET['requesting_user']
apt_request.save()
update_user.appointments = apt_request()
update_user.save()
这将创建一个AppointmentRequest对象,如果update_user.Appoints为null,则可使用该对象设置Appoints ForeignKey
此外,在本规范中:
appointments = models.ForeignKey(AppointmentRequest, on_delete=models.CASCADE, default='', blank=True, null=True)
我非常确定default=''不起任何作用,它默认为null。因此,您可以省略代码的这一部分
继续评论…:
哦还有一件事我不会用外国钥匙来做这个。我会使用ManyToMany,除非用户只允许一次约会
requesting_user = request.GET['requesting_user']
在本部分中,您将用户作为json而不是django模型实例,因此当您应用
update_user = CustomUser.objects.get(username=requested_user)
它什么也得不到
您应该使用django serializer生成userSerializer,然后在应用时使用它将json用户转换为模型实例
update_user = CustomUser.objects.get(username=requested_user)
这应该行。我觉得不错,只要在设置值后保存它,更新用户.约会.保存()我得到的错误是
AttributeError:'NoneType'对象没有属性'requester\u name'。在这一行:
update\u user.appointments.requester\u name=requising\u user`因此,外键没有指向任何实例,并且它的值为None,请确保FK中有一些值,否则情况下,apt\u request=AppointmentRequest()后面的第一行是什么意思。
。它应该调用哪个函数?哦。我想出来了。它应该引用模型类实例。现在看来一切正常。然而,我的印象是,这将允许一对多,即一个用户多个约会。不是这样吗?是和不是。我想我知道你现在在做什么。目前,您的设计允许多个用户进行一次约会。如果希望一个用户有多个约会,则应该在AppointmentRequest模型上具有外键。