[英]DJANGO saving model types in a field as Generic Foreign Keys
我想創建一個看起來像這樣的新模型:
class Note(models.Model):
id = models.AutoField(primary_key=True)
title = ...
message =
entity = *****************
我希望 ******* - 成為任何模型的foreingKey - 不是對象而是模型。 我不希望實體是同一模型的多個對象 - 只是模型。
因此,如果注釋來自 Post 實體應另存為 Post,如果它來自 Notification,則 foriengKey 應為 Notification。
有沒有辦法在 django 中做到這一點,還是我唯一的選擇是將實體名稱保存為字符串值? 並過濾模型名稱,例如。
# Get all the notes for POST Model
Note.objects.filter(entity="Post")
您可以在 Django 中使用contenttypes
應用程序。
class Note(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=50)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
entity = GenericForeignKey('content_type', 'object_id')
您將能夠分配entity
模型實例,並對它們執行查詢( filter(entity=MyModel.objects.get(id=1))
聽起來您真正要尋找的是“ 選擇”。
一個可迭代對象(例如,列表或元組)由恰好兩個項目(例如 [(A, B), (A, B) ...])的可迭代對象組成,用作該字段的選擇。 如果給出了這個,默認的表單小部件將是一個帶有這些選項的選擇框,而不是標准的文本字段。
現在你的模型變成
class Note(models.Model):
POST = "Post"
COMMENT = "Comment"
...
ENTITY_CHOICES( (POST,POST), (Comment, Comment) ...)
id = models.AutoField(primary_key=True)
title = ...
message = ...
entity = models.CharField(max_lenth=5, choices=ENTITY_CHOICES)
現在您可以在評論中運行查詢
Note.objects.filter(entity="Post")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.