我有一個問題,代碼是否可以接受,或者是否有另一種可能以更好的方式擺脫這種情況我的一個模型看起來像這樣:
class ModelA(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
manga = models.ManyToManyField(Manga, through='ModelB')
def manga_list(self):
return ModelB.objects.filter(user=self.pk).all()
def manga_list_reading(self):
return ModelB.objects.filter(user=self.pk, type=utils.READING).all()
第二個模型看起來像這樣:
class ModelB(models.Model):
user = models.ForeignKey(ModelA, on_delete=models.CASCADE, )
manga = models.ForeignKey(Manga, on_delete=models.CASCADE)
type = models.CharField(max_length=30, choices=utils.LIST_PROFILE_CHOICES, null=False, blank=False)
所以我的問題是關于這個 def list return,它是另一種選擇嗎?
uj5u.com熱心網友回復:
您manga_list可以通過以下方式查詢:
self.modelb_set.all() # ModelB objects
因此,為此指定一個方法沒有多大意義,因為您可以使用my_model_a.modelb_set.all(). 此外命名這manga_list有點“誤導”,因為查詢集將回傳ModelB物件,而不是Manga物件。如果要回傳Manga由 鏈接的所有物件ModelB,可以使用以下方法執行此操作:
my_model_a.manga.all() # Manga objects
如果要檢索Manga型別為的物件READING,可以使用以下命令檢索這些物件:
my_model_a.manga.filter(modelb__type=utils.READING) # Manga objects
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/348912.html
標籤:姜戈 django-models
上一篇:如何使欄位可選?DRF
