0

私は Django のライブラリ管理システムに取り組んでいます。

私はBookappApp1と ModelStudentEmployeeにModel を持っていApp2ます。学生は最大 3 冊まで発行できますが、従業員は何冊でも発行できます。

ジャンゴでこれを行うにはどうすればよいですか? ForeignKeyBook Model では、次のようなものを使用する必要があると思います。

class Book(models.Model):
    ...
    issued_to = models.ForeignKey(Student) # <-- Student or Employee
                                           #     how do I do that?

Bookしかし、最大 3 つのインスタンスが 1 つのインスタンスに関連していることを確認するにはどうすればよいですかStudent

4

2 に答える 2

1

私の意見では、django モデルのclean()メソッドを調べる必要があります。インスタンスを保存しようとすると呼び出されます。あなたの場合、コードは次のようになります(テストされていません):

from django.core.exceptions import ValidationError


class Person(models.Model):
    max_books = 1

    def clean(self):
        books_count = self.books.all().count()
        if books_count >= max_books:
            raise ValidationError("This person has too much books !")


 class Book(models.Model):
    issued_to = models.ForeignKey(Person, related_name="books")

このようにして、 Person モデルのサブクラスを作成し、独自の max_books 制限を設定できます。

class Student(Person)
    max_books = 3

class Employee(Person)
    max_books = 30

ただし、このソリューションを使用すると、django モデルの具体的な継承に依存することになり、パフォーマンスの問題が発生する可能性があるため、注意してください。

于 2013-10-10T16:43:59.623 に答える