标签: modelform

如何在 django 的 ModelForm 中使用 DatePicker?

我正在使用 django 3.0,我试图在我的 ModelForm 中显示一个日期选择器小部件,但我不知道如何(我能得到的只是文本字段)。我尝试寻找一些解决方案,但找不到任何解决方案。这就是我的模型和 ModelForm 的样子:

class Membership(models.Model):
  start_date = models.DateField(default=datetime.today, null=True)
  owner = models.ForeignKey(Client, on_delete=models.CASCADE, null=True)
  type = models.ForeignKey(MembershipType, on_delete=models.CASCADE, null=True)

class MembershipForm(ModelForm):
  class Meta:
    model = Membership
    fields = ['owner', 'start_date', 'type']
    widgets = {
        'start_date': forms.DateInput
    }
Run Code Online (Sandbox Code Playgroud)

这是我的 html:

<form class="container" action="" method="POST">
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

python django datepicker modelform

7
推荐指数
2
解决办法
7400
查看次数

使用forms.ModelMultipleChoiceField的Django模型表单

我的Django应用程序中有一个ModelForm,它使用forms.ModelMultipleChoiceField,它在窗体上显示为forms.CheckboxSelectMultiple小部件.此ModelForm用于选择/取消选择多对多关系的值.这是问题所在:当您取消选中所有复选框并保存表单时,它不会保存.如果取消选中除1之外的所有值,它会保存正确.

这里有关于模型形式和多对多关系的技巧吗?我遇到了一个bug吗?我是Django的新手.提前致谢.

自定义字段:

class NetworkMessageChoiceField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return obj.display_message    
Run Code Online (Sandbox Code Playgroud)

型号表格:

class MessageTemplateForm(forms.ModelForm):
    network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects, 
                                             widget=forms.CheckboxSelectMultiple())        
    class Meta:
        model = UserProfile
        fields = ('network_messages',)
Run Code Online (Sandbox Code Playgroud)

查看保存表单:

def save_message_templates(request, extra_context=dict()):
    try:
        profile_obj = request.user.get_profile()
    except ObjectDoesNotExist:
        profile_obj = UserProfile(user=request.user)

    if request.method == 'POST':
        form = MessageTemplateForm(request.POST, instance=profile_obj)
        if form.is_valid():
            form.save()
            return redirect('/')

    return index(request, message_template_form=form)
Run Code Online (Sandbox Code Playgroud)

编辑:

我的表单字段缺少必需= False.

class MessageTemplateForm(forms.ModelForm):
    network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects, 
                                                 widget=forms.CheckboxSelectMultiple(),
                                                 required=False)        
    class Meta:
        model = UserProfile
        fields = ('network_messages',)
Run Code Online (Sandbox Code Playgroud)

django checkbox many-to-many django-forms modelform

6
推荐指数
1
解决办法
4090
查看次数

使用基于类的通用视图DetailView与ModelForm显示一个错误 - 如何继续?

令人印象深刻的是,功能性网站与教程中的通用视图一起快速发展.此外,表单处理的工作流程很好.我使用ModelForm帮助器类从我制作的模型创建一个表单,并很高兴看到这么多的功能汇集在一起​​.当我使用通用list_detail.object_detail时,我很失望,我可以显示的所有内容都是单独的字段.我知道ModelForm类包含用于呈现的信息,因此我想将ModelForm与通用视图一起使用.

我正在询问stackoverflow以获得一些方向,并欣赏几张海报的答案和评论.我已经想出如何让它工作,但DetailView中有一个错误.该解决方案包括一种解决方法.

要将ModelView与通用视图一起使用,并使所有字段自动呈现以下工作:

创建一个项目,并在其中创建应用程序住院患者.

如果你有

# inpatients/models.py

class Inpatient(models.Model):
    last_name = models.CharField(max_length=30)
    first_name = models.CharField(max_length=30,blank=True)
    address = models.CharField(max_length=50,blank=True)
    city = models.CharField(max_length=60,blank=True)
    state = models.CharField(max_length=30,blank=True)
    DOB = models.DateField(blank=True,null=True)
    notes = models.TextField(blank=True)

    def __unicode__(self):
        return u'%s, %s %s' % (self.last_name, self.first_name, self.DOB)

class InpatientForm(ModelForm):
    class Meta:
        model = Inpatient
Run Code Online (Sandbox Code Playgroud)

# inpatients/views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from django.views.generic import DetailView
from portal.inpatients.models import *

def formtest(request):
    if request.method == 'POST':
        form = InpatientForm(request.POST)
        if form.is_valid():
            form.save()
            return …
Run Code Online (Sandbox Code Playgroud)

django bug-reporting modelform django-generic-views

6
推荐指数
1
解决办法
6784
查看次数

在Django Model Form中,验证end_date大于start_date

我的模型中有一个start_date和end_date字段,当它比start_date大时,我想给end_date分配一个错误,我一直在寻找文档,但是没有找到一个关于它的例子.

python django validation modelform

6
推荐指数
1
解决办法
4847
查看次数

用于通用模型的Django Createview

我一直在努力寻找这个,我无法在任何地方找到它.所以,在这里:

我正在尝试构建一个泛型类,它将通用模型作为参数并为其创建表单.为此,我使用Django的ModelForm和CreateView类.这个的主要目标是,当我需要创建一个新表单时,我只是声明一个传递Model名称的新URL.

urls.py

url(r'^create', GenericCreate(model=Author).as_view(), name='create'),
Run Code Online (Sandbox Code Playgroud)

views.py

class GenericCreate(CreateView):

    def __init__(self, model, *args, **kwargs):
        super(GenericCreate, self).__init__(*args, **kwargs)
        self.form_class = to_modelform(self.model)
Run Code Online (Sandbox Code Playgroud)

to_modelform是我实现的一个函数,它将模型转换为模型形式,并且它可以工作.

这给了我以下错误:

/ create中的AttributeError此方法仅在视图类上可用.

先感谢您!

python generics django modelform

6
推荐指数
1
解决办法
818
查看次数

Django ModelForm覆盖__init__

我正在尝试使用当前用户所属的Django组填充ModelForm的Select列表。

没有错误出现,但是我只有一个空的选择列表。

这是我的代码:

class ArchiveForm(forms.ModelForm):

    class Meta:
        model = Archive
        fields = ['tags', 'version', 'sharegp']
        localized_fields = None
        labels = {'tags': 'Related Keywords'}


    sharegp = forms.ChoiceField(label='Share with groups')

    def __init__(self, user, *args, **kwargs):

        #import pudb;pudb.set_trace()
        self.user = user
        super(ArchiveForm, self).__init__(*args, **kwargs)
        self.fields['sharegp'].queryset = Group.objects.filter(user=self.user)
        self.fields['sharegp'].widget.choices = self.fields['sharegp'].choices
Run Code Online (Sandbox Code Playgroud)

请注意,如果我在方法的第一行中启用了调试器__init__,并沿函数前进,则该行:

    self.fields['sharegp'].queryset
Run Code Online (Sandbox Code Playgroud)

提供正确的列表,其中包含该用户的组,但不会传递给实际表单。

我可能会缺少什么?谢谢!

python django django-forms modelform

6
推荐指数
1
解决办法
5982
查看次数

使用 django ModelForm 显示错误

我无法弄清楚如何控制模型表单的字段验证。

这是我的表格模型:

class UserForm(ModelForm):
    class Meta:
        model = User
        fields = ('email', 'password')
Run Code Online (Sandbox Code Playgroud)

以下是我在模板中呈现表单的方式:

<form method="post" action="">
    {% csrf_token %}
    {{ userform.as_p }}
    <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

这是我的观点:

def login_page(request):
    if request.method == 'POST':
        userform = UserForm(request.POST)
        if userform.is_valid():
            email = request.POST['email']
            password = request.POST['password']
            user = authenticate(username=email, password=password)
            if user is not None:
                login(request, user)
                return redirect('/dashboard/')
            else:
                # How can I give the user feedback about authentication failute here. Right now it just reloads the form without …
Run Code Online (Sandbox Code Playgroud)

django validation modelform

5
推荐指数
1
解决办法
5161
查看次数

Django如何在一个表单上输入多条记录

我正在编写具有以下模型的日历应用程序:

class CalendarHour(models.Model):
    '''
    Each day there are many events, e.g. at 10 am, the framer orders
    material, etc.
    '''
    day_id = models.ForeignKey(CalendarDay)
    time = models.TimeField()
    work = models.TextField()

    def __unicode__(self):
        return 'work that took place at {work_time}'.format(work_time = self.time)

class CalendarDay(models.Model):
    '''
    Each project has so many daily logs.  But, each daily log belongs to     only one project (OneToMany relationship)
    '''
    company_id = models.ForeignKey(CompanyCalendar)
    day_date = models.DateField(auto_now_add = True) # Recording the date each log is entered in
    deadline …
Run Code Online (Sandbox Code Playgroud)

django django-templates django-forms modelform django-admin

5
推荐指数
0
解决办法
3599
查看次数

Django ModelForm 更新个人资料图片不保存照片

我想让我的用户更改他们的个人资料图片。上传照片时,我被重定向到成功页面,但照片没有上传到文件夹,关联字段为空。请注意,如果用户已经有照片,它会将字段重置为空白,因此在提交表单后,用户不再有照片。

我的猜测是 form.save(commit=False) 没有上传照片,也没有更新字段,但我不明白为什么!

这是模型、视图和表单:

轮廓模型:

class Profil(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
photo_profil=models.ImageField(null=True,blank=True,upload_to='img/profils', verbose_name="Photo de profil", help_text="La taille du fichier doit être inférieure à {0}Mo. Seules les extensions .png, .jpeg et .jpg sont acceptées.".format(str(int(MAX_UPLOAD_SIZE/1000000))))
cours_valides=models.CharField(blank=True,max_length=255,validators=[int_list_validator])
niveau_valides=models.CharField(blank=True,max_length=255,validators=[int_list_validator])

def __str__(self):
    return "Profil de {0}".format(self.user.username)
Run Code Online (Sandbox Code Playgroud)

模型形式:

class PhotoForm(forms.ModelForm):
class Meta:
    model=models.Profil
    fields=('photo_profil',)
def clean_photo(self):
    photo=self.cleaned_data.get('photo_profil')
    if photo.size>settings.MAX_UPLOAD_SIZE:
        raise forms.ValidationError(_("Le fichier envoyé depasse la limite de %sMo.".format(str(settings.MAX_UPLOAD_SIZE/1000000))))
    return photo
Run Code Online (Sandbox Code Playgroud)

和观点:

@login_required()
def change_photo(request):
    if request.method=="POST":
        form=forms.PhotoForm(request.POST,request.FILES)
        if form.is_valid():
            profil=form.save(commit=False)
            profil.user=request.user
            profil.save()
            return redirect('espace_personnel')
    else:
        form=forms.PhotoForm() …
Run Code Online (Sandbox Code Playgroud)

python django upload modelform profile-picture

5
推荐指数
1
解决办法
2622
查看次数

如何在模型表单中使用自动完成选择小部件

我知道 Django 2.0 中有一个新功能,它是 ModelAdmin 中的 AutocompleteSelect 小部件。我试图在我的自定义 modelForm 中使用它,但失败了。

像这样试过

#unit is the foreign key to the incident

class AccountForm(forms.ModelForm):
    class Meta:
        model = Invoice
        ...
        ...
        widgets = {       'incident':widgets.AutocompleteSelect(Invoice._meta.get_field('incident').remote_field, admin.site)
        }
        ...
Run Code Online (Sandbox Code Playgroud)
#Invoice model

class Invoice(models.Model):
    ...
    incident = models.ForeignKey(Unit, on_delete=models.CASCADE,null=True)
    ...
Run Code Online (Sandbox Code Playgroud)

希望任何人都可以帮助我。谢谢

python django modelform

5
推荐指数
1
解决办法
1426
查看次数