Django外键下拉 [英] Django foreign key drop down

查看:288
本文介绍了Django外键下拉的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Django和Python的新功能,我需要一个小的帮助外键下拉。基本上,我有一个类别模型和一个图像模型,我希望用户能够选择将图像放入哪个类别。如何在图像形式中为类别创建一个下拉列表?我的意见和HTML是否也正确?我已经在网上看了,但我似乎无法自己做。我不断收到错误。

New to Django and Python and I need a little help with a foreign key drop down. Basically, I have a category model and a image model and I want users to be able to choose which category to put the image in. How do I create a drop down for the category in the image form? Are my views and html correct too? I have had a look online but I can't seem to do it myself. I keep getting errors.

这是我的模型:

class Images(models.Model):
    image = models.ImageField(upload_to='images', blank=False)
    img_name = models.CharField(max_length=120, blank=True)
    img_date = models.DateTimeField(default=now())
    img_user = models.ForeignKey(User)
    img_cat_id = models.ForeignKey(Categories)

    def __unicode__(self):
        return self.img_name

class Categories(models.Model):
    cat_descr = models.CharField(max_length =120, blank=False)

    def __unicode__(self):
       return self.cat_descr

查看:

@login_required
def upload_images(request):
    context = RequestContext(request)
    context_dict={}

    if request.method == 'POST':  # render the form, and throw it back.
        # take the form data and process it!

        form = UploadImagesForm(request.POST, request.FILES)

        if form.is_valid():
            print 'form is_valid'


            upload_image = form.save(commit=False)
            upload_image.img_user = request.user

            if 'image' in request.FILES:
                upload_image.image  =request.FILES['image']

            upload_image.save()

            return render(request, 'rmb/upload.html', {'upload_image': form})

        else:
            print form.errors

    # Not a HTTP POST, so we render our form using two ModelForm instances.
    # These forms will be blank, ready for user input.
    else:
        form = UploadImagesForm()

        context_dict = {'upload_image': form}
        all_categories = Categories.objects.order_by('-id')
        context_dict['all_categories'] = all_categories
        print context_dict

        return render_to_response('rmb/upload.html', context_dict, context)

FORMS:

class UploadImagesForm(forms.ModelForm):

#cat_list = ModelChoiceField(queryset=Categories.objects.all())

class Meta:
    model = Images
    fields=('image','img_name')

HTML

{% block body_block %}
    <form id="upload_form" method="post" action="/rmb/upload/"
            enctype="multipart/form-data">

            {% csrf_token %}
             {{ upload_image.as_table }}
            <input type="submit" name="submit" value="Upload" />
     {% for categories in all_categories %}

         <div> {{ categories.id }} </div>
         {{ categories.cat_descr }}
         <input type="submit" name="submit" value="Upload" />
      {% endfor %}


    </form>
{% endblock %}


推荐答案

您不需要手动插入表单的HTML,只需使用<$模板中的c $ c> {{form}}

{% block body_block %}
    <form id="upload_form" method="post" action="/rmb/upload/"
            enctype="multipart/form-data">

            {% csrf_token %}
            {{ form }}
    </form>
{% endblock %}

默认情况下,一个ForeignKey将是一个选择字段,所以你不应该做更多的事情。

By default a ForeignKey will be a select field so you shouldn't need to do much else.

除此之外,给您的模型和字段更合适的名称。我们知道这些都是图像领域,因为它们是图像,并确保,除非你的模型是一个集合的东西,你给它一个单一的名字。最后,当使用外键和项目获得额外的字段 fieldname_id 这只是ID,而字段名

As an aside, give your models and fields more appropriate names. We know these are all image fields, because they are on the image and make sure, unless your model is a collection of things, you give it a singular name. Lastly, when using a Foreign Key and item gets an extra field of fieldname_id that is just the ID, whereas fieldname is the property that gives the related item as well.

所以而不是:

class Images(models.Model):
    image = models.ImageField(upload_to='images', blank=False)
    img_name = models.CharField(max_length=120, blank=True)
    img_date = models.DateTimeField(default=now())
    img_user = models.ForeignKey(User)
    img_cat_id = models.ForeignKey(Categories)

使用:

class Image(models.Model):
    image = models.ImageField(upload_to='images', blank=False)
    name = models.CharField(max_length=120, blank=True)
    date = models.DateTimeField(default=now())
    user = models.ForeignKey(User)
    category = models.ForeignKey(Categories)

这篇关于Django外键下拉的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆