我现在正在使用django来编写一个程序,我的问题是我对构建模型感到困惑。 我在单独的应用程序中制作了两个模型,即用户和设备。关系是用户可以借用1到n个设备,但每个设备只能由一个用户保留。然后,在用户类中,我需要一个可以存储设备类的属性borrowed_device(他借用的所有设备),而在Device类中,我需要一个可以帮助我跟踪借用此设备的人的属性。
以下是我的代码,我不知道如何写,任何建议都将不胜感激。
用户/模型
from django.db import models
from device.models import Device
class User(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=20)
borrowed_device = models.ForeignKey('Device', on_delete=models.CASCADE(), related_name='borrowed_device')
# id = models.IntegerField()
class Meta:
ordering = ('username', )
设备/模型
from django.db import models
from user.models import User
class Device(models.Model):
DEVICE_TYPE = {('chemistry', 'chemistry'), ('physics', 'physics'), ('computer', 'computer'), ('biology', 'biology')}
device_id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
type = models.CharField(max_length=20, choices=DEVICE_TYPE)
bought_in_time = models.DateTimeField(auto_now_add=True)
last_used_time = models.DateTimeField(auto_now=True)
# number = models.IntegerField(default=1)
status = models.BooleanField(default=False)
user = models.ForeignKey(User, on_delete=models.CASCADE(), related_name='user')
class Meta:
ordering = ('type', '-bought_in_time')
def __str__(self):
return self.name
# def get_absolute_url(self):
# return reverse('')
答案 0 :(得分:0)
您说用户可以容纳1个设备,因此用户和设备型号之间存在一对多的关系,如下所示:
class User(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=20)
borrowed_device = models.ManyToManyField('Device' )
class Meta:
ordering = ('username', )
您的设备型号中不需要user = models.ForeignKey(User, on_delete=models.CASCADE(), related_name='user')
字段。
device.user_set.all()
将检索与该特定设备关联的所有用户。
因此,在您的情况下,您只需要确保该特定设备与任何用户相关联。如果没有,您可以将设备添加到User manytomanyfield。