如何正确构建我的模型?

时间:2017-05-03 06:18:10

标签: python django python-3.x django-models

我现在正在使用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('')

1 个答案:

答案 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。