強制性的,我是一個django初學者,我不明白爲什麼我的代碼不工作。如何檢查對象在模板中的哪個子類?
我想通過視圖中的父類進行排序以獲取對象,然後將該對象傳遞給模板。在該模板中,我爲每個子類顯示了某些字段,還有一些字段是從父類繼承的。
我試過在我的模板中使用isinstance()
,但它引發了錯誤。之後,我嘗試通過我的模板中的if語句來檢查每個子類的靜態屬性。當這樣做時,沒有任何子類特定字段顯示。所以我試圖在視圖中設置屬性,並且仍然沒有顯示任何子類特定的字段。
下面是父對象類和子類中的一個(型號):
class Chunk(models.Model):
name = models.CharField(max_length=250)
text = models.CharField(max_length=500)
images = models.FileField()
question = models.CharField(max_length=250)
expected_completion_time = models.IntegerField(default=1)
keywords = models.CharField(max_length=250, blank=True, null=True)
topic = models.CharField(max_length=250, blank=True, null=True)
course = models.CharField(max_length=250, blank=True, null=True)
def get_absolute_url(self):
return reverse('detail', kwargs={'pk':self.pk})
def __str__(self):
return self.name
class Concept(Chunk):
application = models.CharField(max_length=500)
subconcept1 = models.CharField(max_length=500, blank=True, null=True)
subconcept2 = models.CharField(max_length=500, blank=True, null=True)
subconcept3 = models.CharField(max_length=500, blank=True, null=True)
subconcept4 = models.CharField(max_length=500, blank=True, null=True)
subconcept5 = models.CharField(max_length=500, blank=True, null=True)
subconcept6 = models.CharField(max_length=500, blank=True, null=True)
subconcept7 = models.CharField(max_length=500, blank=True, null=True)
subconcept8 = models.CharField(max_length=500, blank=True, null=True)
subconcept9 = models.CharField(max_length=500, blank=True, null=True)
subconcept10 = models.CharField(max_length=500, blank=True, null=True)
conceptimage = models.FileField(blank=True, null=True)
@property
def mode(self):
return "concept"
這裏是視圖:
def startpomodoro(request):
key = getpriority(Chunk.objects.all())
object = Chunk.objects.get(id=key)
a = random() > 0.5
mode = str()
if isinstance(object, Problem):
if a:
mode = "problemoutline"
else:
mode = "problemfull"
elif isinstance(object, Concept):
mode = "concept"
elif isinstance(object, Formula):
mode = "formula"
elif isinstance(object, Code):
mode = "code"
context = dict(object=object, mode=mode)
return render(request, 'pomodoro/pomodorogo.html', context)
這裏是模板的相關部分:
<center>
<p>{{ object.text }}</p>
{% if mode == concept %}
<p>{{ object.application }}</p>
<p>{{ object.subconcept1 }}</p>
{% if object.subconcept2 %}
<p>{{ object.subconcept2 }}</p>
{% elif mode == formula %}
我不明白爲什麼我沒有任何這些方法來工作。我確信這是我執行的一個問題,但我不知道我做錯了什麼。
但對象不是任何的茨艾倫東西。這是一個大塊,因爲這就是你要求的。 –
當我創建這些其他東西時,它們被輸入到它們各自的數據表和塊表中。你是否在說我所做的只能讓我訪問Chunk表中的信息?如果是這樣,你能推薦任何適當的方法從塊到其相應的子類數據? – Era
我看到的最簡單的解決方案是使用OneToOneField進行繼承。 因此,請檢查此[鏈接](https://docs.djangoproject.com/el/1.10/topics/db/examples/one_to_one/) –