通过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模型上具有外键。