如何使用下拉HTML字段传递模板中的选择? (Django)

时间:2018-12-09 10:21:32

标签: django python-3.x django-models django-forms django-templates

这些是我的文件:

views.py

from django.shortcuts import render, get_object_or_404, redirect
from .models import Campaign
from .forms import CampaignForm
from users.models import CustomUser
def create(request):

    form = CampaignForm()

    if request.method == 'POST':
        title = request.POST['title']
        types = request.POST['type']
        category = request.POST['category']
        location = request.POST['location']
        funding_goal = request.POST['funding_goal']


        user = CustomUser.objects.first()

        campaign = Campaign.objects.create(
            title =         title,
            types =         types,
            category =      category,
            location =      location,
            funding_goal =  funding_goal,
            starter =       user
        )

        return redirect('campaign:campaign_list')

    return render(request, 'create_a_campaign.html', {'formset':form})

Forms.py

from django import forms
from .models import Campaign

class CampaignForm(forms.ModelForm):

    class Meta:
       model = Campaign
       fields = ['title','types','category','location','funding_goal']

Models.py

class Campaign(models.Model):
    types = (
        ('health', 'Health'),
        ('education', 'Education'),
    )

    categories = (
        ('health', 'Health'),
        ('education', 'Education'),
    )

    locations = (
        ('karachi','Karachi'),
        ('lahore','Lahore'),
        ('islamabad','Islamabad'),
        ('quetta','Quetta'),
        ('peshawar','Peshawar'),
    )

    title =          models.CharField(max_length=100, null=True, blank=True)
    description =    models.CharField(max_length=700, null=True, blank=True)
    types =          models.CharField(max_length=30, choices=types, null=True, blank=True)
    category =       models.CharField(max_length=30, choices=categories, null=True, blank=True)
    tags =           TaggableManager(blank=True)
    image =          models.ImageField(null=True, blank=True)
    location =       models.CharField(max_length=30, choices=locations, null=True, blank=True)
    funding_goal =   models.DecimalField(max_digits=10, decimal_places=3, null=True, blank=True)
    starter =        models.ForeignKey(user.CustomUser, related_name='campaigns', on_delete=models.CASCADE, null=True, blank=True)
    last_updated =   models.DateTimeField(auto_now_add=True)
    team =           models.OneToOneField(Team, related_name='campaigns', on_delete=models.CASCADE, null=True, blank=True)
    shop =           models.OneToOneField(shop_models.Shop, related_name='campaigns', on_delete=models.CASCADE, null=True, blank=True)

    def __str__(self):
        return self.title

HTML模板

<div class="field-select field-cat">
    <select name="type" id="field-cat">
        <option value="">Select type</option>
               {% for type in formset.types %}
        <option value="{{ type }}"></option>
               {% endfor %}

每当我保存实例时,它都会在类型列中将类型另存为“ option value =“。如何正确传递数据库中的类型?

0 个答案:

没有答案