如何为新用户添加仅出现一次的表单,然后再返回常规表单

时间:2017-07-04 10:15:09

标签: python django

我想创建一个包含额外字段的表单:

这是常规表单的models.py:

精品店:

class Boutique(models.Model):
    name = models.CharField(max_length=250)
    user = models.ForeignKey(User, default=1)
    logo = models.FileField(max_length=250)

    def __str__(self):
        return self.name

form.py:

class BoutiqueForm(forms.ModelForm):

    class Meta:
        model = Boutique
        fields = ['name', 'logo']

Views.py:

def create_boutique(request):
    if not request.user.is_authenticated():
        return render(request, 'produit/login.html')
    else:
        form = BoutiqueForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            boutique = form.save(commit=False)
            boutique.user = request.user
            boutique.logo = request.FILES['logo']
            file_type = boutique.logo.url.split('.')[-1]
            file_type = file_type.lower()
            if file_type not in IMAGE_FILE_TYPES:
                context = {
                    'boutique': boutique,
                    'form': form,
                    'error_message': 'Image file must be PNG, JPG, or JPEG',
                }
                return render(request, 'produit/create_boutique.html', context)
            boutique.save()
            return render(request, 'produit/detail.html', {'boutique': boutique})
        context = {
            "form": form,
        }
        return render(request, 'produit/create_boutique.html', context)

form_template.html:

{% for field in form %}
<div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
        <span class="text-danger small">{{ field.errors }}</span>

    </div>
    <label class="control-label col-sm-2">{{ field.label_tag}}</label>
    <div class="col-sm-10">{{ field }}</div>
</div>{% endfor %}

我想添加一个表boutique_commerçant,其中包含2个额外字段facebook_link和entreprise ...出现在create_boutique.html中的新注册用户只有一次......

1 个答案:

答案 0 :(得分:0)

查看this question and answer

您可以添加一个额外的字段,默认为False,如果保存了两个字段,则设置为True。这样,您可以检查信息是否存在,并且仅在不显示时显示表单。