簡體   English   中英

為 Django 多對多關系定義連接表是最佳實踐嗎?

[英]Is it best practice to define a join table for Django many to many relationships?

我有以下代碼:

class Tutors(models.Model):
    first_name = models.CharField(max_length=20, default=None, blank=False) #you need to add default none and blank false to enforce the Not-Null constraint
    last_name = models.CharField(max_length=20, default=None, blank=False)
    email = models.EmailField(max_length=254,default=None, blank=False)
    birth_day = models.DateField(auto_now=False, auto_now_add=False, default=False, blank=False)

    def __str__(self):
        return(self.first_name + ' ' + self.last_name)

        
class ArtSubjects(models.Model):
    subject_name = models.CharField(max_length=20, default=None, blank=False)
    tutors = models.ManyToManyField(Tutors)

    def __str__(self):
        return self.subject_name

我的問題是,我應該像這樣定義多對多關系嗎? 或者我應該為表定義一個新類?

我問的原因是我可以通過 ArtSubjects 類這樣查詢來從連接表中獲取對象 - adobeAI.tutors.all()返回<QuerySet [<Tutors: Matt Aird>, <Tutors: Tom John>]>

但是我想不出一種方法可以通過導師查詢聯接表來查看個別導師教什么課。

對此有何建議?

你可以用同樣的方式查詢導師。 這是一個例子:

john = Tutors.objects.get(first_name="John")
john.artsubjects_set.all()

如果你想有一個比更可讀的名字_set ,加related_name在ManyToManyField字段:

class ArtSubjects(models.Model):
    tutors = models.ManyToManyField(Tutors, related_name="teaches")
    ...

john.teaches.all()

您可以在文檔https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_many/ 中找到更多詳細信息

這可以完成(參見https://docs.djangoproject.com/en/3.2/topics/db/models/#extra-fields-on-many-to-many-relationships ),但如果您不添加額外的中間模型的數據我不推薦它。

Django 將在幕后創建中介模型。 在這種情況下,它可以作為ArtSubjects.tutors.through訪問。

有關如何查詢關系的信息,請參閱@Marco 的回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM