有没有办法使'One'表在 Django 中的 OneToManyRelationship 中可选



我有两个表,一个是Anonym,另一个是Userdatabase。我希望我的应用程序在不需要任何登录信息的情况下工作,因此它将仅通过使用用户的设备ID来处理帐户信息来与Anonym一起工作。但是,如果用户想要访问额外的功能,则需要创建一个具有用户名/密码的用户。然后我将使用Userdatabase表来处理数据。一个用户可以有多个设备,因此存在OneToMany关系,但一个设备不必有一个用户(他们不需要注册(,这会破坏关系。有没有一种方法可以在保持OneToMany关系的同时使Userdatabase表成为可选的?也许是通过在UserDatabase中插入一个方法或另一个类?请找到以下代码:

--型号——

class Anonym(models.Model):
deviceid=models.ForeignKey(Userdatabase,max_length=200,on_delete=models.SET_NULL,null=True)
accounttype=models.TextField(default='Free')
numberofattempts=models.IntegerField(default=0)
created=models.DateField(auto_now_add=True)
class Userdatabase(models.Model):
username=models.CharField(max_length=20,unique=True)
password=models.CharField(max_length=20)
deviceid=models.TextField(default='inputdeviceid')
accounttype=models.TextField(default='Free')
numberofattempts=models.IntegerField(default=0)
created=models.DateField(auto_now_add=True)

--urls--

urlpatterns=[path('deviceregister/<str:id>/',views.deviceregistration)]

--视图--

def deviceregistration(request,id):
import time
deviceid=id
newdevice-models.Anonym(created=time.strftime("%Y-%m-%d"),deviceid=deviceid)
newdevice.save()
return HttpResponse('Succesful registration')

例如,当我以"/deviceRegistor/123456/"的形式发送请求时,django会引发一个ValueError,表示Cannot assign&quot123456’":"Anonym.deviceid";必须是";用户数据库";例子

您应该按字段名进行搜索,字段名包含id。在您的情况下,它是deviceid_id

newdevice=models.Anonym(created=time.strftime("%Y-%m-%d"),deviceid_id=deviceid)

在您的情况下,deviceid应该是Userdatabase.objects.get(pk=id)

deviceid=Userdatabase.objects.get(pk=id)
newdevice=models.Anonym(created=time.strftime("%Y-%m-%d"),deviceid=deviceid)

在我看来,你项目中的字段名称真的会让任何感到困惑

如果您不想更改型号,您可以将任何新添加的设备链接到dummy用户。当以后用户想要链接设备时,请将dummy替换为真实用户。

如果可以更改模型,则可以删除外键关系,并添加另一个链接双方id的表:一个字段用于deviceid,另一个字段为userid

我知道这两种选择都有味道,但至少它们应该有效:(

相关内容

  • 没有找到相关文章

最新更新