繁体   English   中英

如何在 Django 中用一种形式更新多个对象?

[英]How to update multiple objects with one form in Django?

我创建了一个客户 model 和一个 function 用于将客户分配给用户。 分配 function 是Customer model 中的更新user字段。

Customer model 具有country /地区字段。 我想将同一国家/地区的客户分配给具有一种形式的用户。 为此,我列出了所有国家和分配操作的表格? 我怎样才能做到这一点?

编辑:现在,我可以获得国家名称和分配用户。 如何使用这些属性并使用所选国家和用户更新对象( Customer )。

模型.py

class Customer(models.Model):
    
    customer_name = models.CharField(max_length=20)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, unique=False)
    ...
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, blank=True, null=True)

class Country(models.Model):
    REGION = [
        ('Northwest Europe', 'Northwest Europe'),
        ('Southwest Europe', 'Southwest Europe'),
        ...
    ]

    country_name = models.CharField(max_length=30)
    country_code = models.CharField(max_length=5)

视图.py

def country_customer_list(request):
    current_user = request.user
    userP = UserProfile.objects.get_or_create(username=current_user)
    customer_list = Customer.objects.filter(company=userP[0].company)
    countries = Customer.objects.values_list('country__country_name', flat=True).distinct()

    form = CountryForm(request.POST or None)
    if request.POST:
        country_form = request.POST.get('country_form', None)
        user = request.POST.get('user', None)
        form.save()
        print(country_form)
        print(user)

        return redirect('user:customer_countries')

    context = {
        'customer_list': customer_list,
        'countries': countries,
        'form': form
    }

    return render(request, 'country_customer_list.html', context)

country_customer_list.html *

<table id="multi-filter-select" class="display table table-striped table-hover grid_" >
                                    <thead>
                                        <tr>
                                            <th>Country</th>
                                            <th>Operations</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                    {% for country in countries %}
                                        <tr>
                                            <td>{{country}}</td>
                                            <td>

                                                <button type="button" class="btn btn-info btn-block" data-toggle="collapse" data-target="#demo{{ forloop.counter }}">&nbsp;Assign&nbsp;&nbsp;&nbsp;&nbsp;</button>
                                                <div id="demo{{ forloop.counter }}" class="collapse">

                                                    <form method="post">
                                                                {% csrf_token %}
                                                                {{ form|crispy }}
                                                                <input type="hidden" name="country_form" value="{{ country }}">
                                                                <button type="submit" class="btn btn-primary btn-sm">Assign</button>
                                                    </form>


                                                </div>
                                            </td>
                                        </tr>
                                    {% endfor %}
                                    </tbody>
                                </table>

forms.py

class CountryForm(forms.ModelForm):
    class Meta:
        model = Customer
        fields = ('user',)

使用您的选择填充国家模型,它们将出现在模板中

更改模型

class Country(models.Model):

    country_name = models.CharField(max_length=30)
    country_code = models.CharField(max_length=5)
    def __str__(self):
        return str(self.country_name) + ' ' + str(self.country_code)

forms.py

class CountryForm(forms.ModelForm):
class Meta:
    model = Customer
    fields = ('user','country',)

在模板中

{{form.country}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM