Django-模型-事先未知的字段数

时间:2019-05-24 00:06:16

标签: django django-models

这与表单无关,而与模型有关。

现在我有:

class Verse(models.Model):
code = models.CharField(
    max_length=10, verbose_name='vers',
    unique=True)  # ex : v01
# ... others fields

和:

class Hemistiche(models.Model):
    code = models.CharField(
        max_length=20, verbose_name='codeHem',
        unique=True)  # ex : v01h01, v01h02

    verse = models.ForeignKey(
        Verse, on_delete=models.CASCADE, related_name='hemistiche')

    text = models.TextField(blank=False)

    # nothing else

如您所见,Hemistiche只有几个字段。 在大多数情况下,Verse会有2个杂项。 但是,很少有我在一节中有3 ou 4个单字。

所以问题是:知道我可能有2、3或4个,但有没有办法将Hemistich作为Verse的一部分包含在内,但我不能一劳永逸地设置一次。

更清楚吗?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您想要什么。现在,我将向您展示一个小例子。您具有ForeignKeyManyToOne / OneToMany)关系。

您的模型。py

class Verse(models.Model):
    code = models.CharField(max_length=10, verbose_name='vers', unique=True)  # ex : v01


class Hemistiche(models.Model):
    code = models.CharField(max_length=20, verbose_name='codeHem', unique=True)  # ex : v01h01, v01h02
    verse = models.ForeignKey(Verse, on_delete=models.CASCADE, related_name='hemistiche')
    text = models.TextField(blank=False)

关于模型,Verse对象代表One的一面,而Hemistiche对象代表Many的一面。您可以使用RelatedManager(属于Manager的子类)进行查询。

from django.http import HttpResponse
from django.db import connection
def my_view(request):
    verse = Verse.objects.get(code='v01') # return verse object
    print(verse.hemistiche) # this returns RelatedManager object, and has instance methods available like, add(), create(), remove().
    verse.hemistiche.create(code='hemistiche_code', text='hemistiche text') # This will create row in Hemistiche table, with associated verse_id.
    verse.hemistiche.add(hemistiche1, hemistiche2, hemistiche3) # This will update all hemistiche row and sets associated verse_id for it.
    print(connection.queries) # this will log all queries performed in your view. Good for debugging.
    return HttpResponse('<h1>test</h1>')

希望,我很有帮助。祝你好运。