Django-如何向多个字段模型添加数据?

Django-如何向多个字段模型添加数据?,django,Django,我有以下模型、视图和模板: <form method="post">{% csrf_token %} <input type="submit" value="Create Batch" align="right"> <table class="table table-striped" id="myTable"> <tr> <th>ID</th>

我有以下模型、视图和模板:

<form method="post">{% csrf_token %}
    <input type="submit" value="Create Batch" align="right">
    <table class="table table-striped" id="myTable">
        <tr>
            <th>ID</th>
            <th>Material ID</th>
            <th>Series Title</th>
            <th>Season Tile</th>
            <th>Season Number</th>
            <th>Episode Title</th>
            <th>Episode Number</th>
            <th>Create Batch</th>
        </tr>
        {%  for i in assets %}<tr>
            <td>{{i.pk}}</td>
            <td><a href="/repo/{{ i.id}}">{{i.material_id}}</a></td>
            <td>{{i.series_title}}</td>
            <td>{{i.season_title}}</td>
            <td>{{i.season_number}}</td>
            <td>{{i.episode_title}}</td>
            <td>{{i.episode_number}}</td>
            <td>
                <input type="checkbox" name="batch" value="{{i.pk}}">
            </td>
        </tr>{% endfor %}
    </table>
    </form>
models.py:

class Batch(models.Model):
    material_id = models.ManyToManyField(AssetMetadata)
    user = models.ForeignKey(User)

    def __str__(self):
        return 'Batch_' + str(self.pk) + '_' + self.user.username

class AssetMetadata(models.Model):

    material_id = models.CharField(max_length=256, blank=True)
    series_title = models.CharField(max_length=256, blank=True)
    season_title = models.CharField(max_length=256, blank=True)
    season_number = models.IntegerField(default=0)
    episode_title = models.CharField(max_length=256, blank=True)
    episode_number = models.IntegerField(default=0)
    synopsis = models.TextField(max_length=1024, blank=True)
    ratings = models.CharField(max_length=256, blank=True)

    def __str__(self):
        return self.material_id
views.py:

def assets_in_repo(request):

    asset_list = AssetMetadata.objects.order_by('id').all()
    page = request.GET.get('page', 1)
    paginator = Paginator(asset_list, 50)

    try:
        assets = paginator.page(page)
    except PageNotAnInteger:
        assets = paginator.page(1)
    except EmptyPage:
        assets = paginator.page(paginator.num_pages)

    if request.method == 'POST':

        batch_list = request.POST.getlist('batch')
        print(batch_list)

    return render(request, 'assets_db/assets.html', {'assets': assets})
模板中的代码段:

<form method="post">{% csrf_token %}
    <input type="submit" value="Create Batch" align="right">
    <table class="table table-striped" id="myTable">
        <tr>
            <th>ID</th>
            <th>Material ID</th>
            <th>Series Title</th>
            <th>Season Tile</th>
            <th>Season Number</th>
            <th>Episode Title</th>
            <th>Episode Number</th>
            <th>Create Batch</th>
        </tr>
        {%  for i in assets %}<tr>
            <td>{{i.pk}}</td>
            <td><a href="/repo/{{ i.id}}">{{i.material_id}}</a></td>
            <td>{{i.series_title}}</td>
            <td>{{i.season_title}}</td>
            <td>{{i.season_number}}</td>
            <td>{{i.episode_title}}</td>
            <td>{{i.episode_number}}</td>
            <td>
                <input type="checkbox" name="batch" value="{{i.pk}}">
            </td>
        </tr>{% endfor %}
    </table>
    </form>
{%csrf\u令牌%}
身份证件
物料ID
系列标题
季节性瓷砖
季号
集名
剧集号
创建批处理
{资产%中的i为%1}
{{i.pk}}
{{i.series_title}
{{i.季节名称}
{{i.U编号}
{{i.插曲标题}
{{i.插曲编号}
{%endfor%}
我正试图从复选框中获取提供的数据,并将其保存在
批处理
模型中

用户选择资产来创建一个批处理,表单在
AssetMetadata
中返回这些资产的
pk
,选择存储在通过
batch\u list=request.POST.getlist('batch')
创建的列表中。我想使用此列表中存储的数据在
Batch
中创建一个新条目,然后链接到
AssetMetadata
中的资产
pk

我已经能够在Django管理页面中成功地做到这一点,但我最好在视图中做到这一点

我已经阅读和搜索了stackoverflow,但我很困惑如何做到这一点

info = Batch.objects.create(season_title ='foo', .....)
info2= AssetMetadata.objects.create(material_id ='some')
info.material_id.add(info2)
试试这样的吧,我想你需要

obj = AssetMetadata.objects.get(id=pk)
obj.batch_set.add(* batch_list)

多亏了这两个答案的帮助,我才得以工作,我就是这样做的:

def assets_in_repo(request):

    asset_list = AssetMetadata.objects.order_by('id').all()
    page = request.GET.get('page', 1)
    paginator = Paginator(asset_list, 50)

    try:
        assets = paginator.page(page)
    except PageNotAnInteger:
        assets = paginator.page(1)
    except EmptyPage:
        assets = paginator.page(paginator.num_pages)

    if request.method == 'POST':

        batch_list = request.POST.getlist('batch')

        info = Batch.objects.create(user_id=request.user.id)
        for item in batch_list:
            info.material_id.add(item)

请注意,您对AssetMetadata字段上的
id
字段的定义显然没有达到预期效果。它只是定义了一个名为
id
的类属性,该属性的静态值为导入时
自动创建计数器的值。是的,这就是我想要的,基本上随着新资产添加到存档中,它会增加。但它不会,这是我的观点。它是为整个类设置的静态值,在导入时设置。Django会自动为模型提供一个主键值,该值会自动递增,您应该使用它。啊,是的,我明白您的意思,谢谢。
*
非常重要。