2017-05-03 9 views
0

私はdjangoを使用してプログラムを作成しています。私の問題はビルドモデルと混同されています。 私は、ユーザーとデバイスである別々のアプリケーションで2つのモデルを作っています。ユーザーは1対nのデバイスを借用することができますが、各デバイスは1人のユーザーだけが保持できます。次に、ユーザークラスでは、デバイスクラス(彼が借りたすべてのデバイス)を格納できるborrowed_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

ユーザーが1を保持できるという。.. nはデバイスので、ユーザとデバイスのモデル間の多くの関係に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に追加できます。

+0

ありがとう、私はまだユーザーのボロウリングデバイスの履歴をどのように保存することができますか?人々はデバイスa1を借用し、借用履歴を属性に保存する方法は?彼が借りたすべてのデバイスを意味します。私はそれを保存するためにユーザーにリストを作ってください。 – Richard

+0

@リチャード、履歴を維持したい場合。デバイスの履歴/ログを表すモデルに異なる列(manytomany)を設定する必要があります。あなたは単にその列を追加するだけで、それから削除することはできません。また、2つの列(ユーザー、デバイス)を持つ別のモデル(HISTORY)を作成し、そのモデルに保存することもできます。 –

関連する問題