【问题标题】:Django fields in form表单中的 Django 字段
【发布时间】:2018-06-13 16:14:13
【问题描述】:

我是 Django 的初学者,因此这可能是一个简单的问题。但我无法成功克服这一点。

这是我的models.py

class Category(models.Model):
    name = models.CharField(max_length=128)
    abbr = models.CharField(max_length=5)

    def __unicode__(self):
        return self.name

class Fabric(models.Model):
    name = models.CharField(max_length=128)
    abbr = models.CharField(max_length=5)

    def __unicode__(self):
        return self.name

class Manufacturer(models.Model):
    name = models.CharField(max_length=128)
    location = models.CharField(max_length=128)
    name_abbr = models.CharField(max_length=5, default=None)
    loc_abbr = models.CharField(max_length=5, default=None)

    def __unicode__(self):
        return self.name

class Images(models.Model):
    design_id = models.CharField(max_length=128)
    file = models.ImageField(upload_to='images')
    cost_price = models.FloatField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    fabric = models.ForeignKey(Fabric, on_delete=models.CASCADE)
    manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)
    selling_price = models.FloatField()
    aliveness = models.IntegerField()
    date_added = models.DateTimeField(default=datetime.datetime.now)
    set_cat = models.IntegerField()
    set_cat_no = models.IntegerField()
    set_cat_name = models.CharField(max_length=50, blank=True)

我正在构建一个包含服装设计的服装管理数据库系统。 我的 forms.py 是

class ImagesForm(forms.ModelForm):

class Meta:
    model = Images
    fields = ('file','cost_price','set_cat_no','set_cat_name',)

我的意见.py

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

if request.method == 'POST':
    form = ImagesForm(request.POST,request.FILES)

    if form.is_valid():

        image = form.save(commit=False)

        image.save()

        return render_to_response(request,'cms/upload-photo.html', {'upload_image': form})
    else:
        print form.errors

else:
    form = ImagesForm()
    context_dict = {'upload_image': form}

    return render_to_response('cms/upload-photo.html',context_dict, context)

我的 upload-photo.html 是

{% block main %}

<form id="upload_form" method="post" action="/zoomtail/upload-photo/" enctype="multipart/form-data">
{% csrf_token %}
{{ upload_image }}
</form>
{% endblock %}
  1. 这里的问题是当我转到 /upload-photo/ 时,我看不到类别、面料和制造商的外键的下拉列表。我读过它应该是自动生成的,但我没有看到任何东西。

  2. 并且selling_price 必须根据必须在表单中输入的 cost_price 的给定百分比增加来计算。我该怎么做呢?并且服装的aliveness必须默认设置为1。如何做到这一点?

  3. 服装的set-cat字段如果属于套装则为1,如果属于目录则为2。如何获得一个单选按钮,询问是否设置或目录以及在数据库中作为整数捕获?

  4. 服装的 design-id 字段必须是一个字符串,其中包含其所属的所有字段的类别、面料、制造商等的缩写。如何动态执行此操作?

我知道,这是一个很长的问题,但我是一个新手,这些问题真的让我头疼了好几天。我将非常感谢那些回答这个问题的人。

【问题讨论】:

  • 您最好提出单独的问题,而不是针对 4 个不同的问题寻求帮助。首先,不要使用render_to_response,它已经过时了。请改用render。对于您的第一个问题,您没有在fields 中包含'category',因此不会包含在表单中。
  • 在ImagesForm类的字段中添加字段
  • 好的,谢谢。

标签: python django image web


【解决方案1】:
  1. 我认为下拉列表的问题在于您已从 ImageForm 中排除了这些字段。你有:

    fields = ('file','cost_price','set_cat_no','set_cat_name',)

    但应该有:

    fields = ('file','cost_price','set_cat_no','set_cat_name', 'category', 'fabric', 'manufacturer,)`

    如果这不起作用,您的数据库中是否有CategoriesFabricManufacturer 的选项?如果您的表格为空,则下拉列表将为空。如果数据库中有值,是否生成了 HTML 但标签值为空白(即&lt;option&gt;{this is blank}&lt;/option&gt;)?在 django 中,您可以覆盖 __str__ 函数来指定如何标记下拉选项

如下覆盖__str__

class Category(models.Model):

    name = models.CharField(max_length=128)
    abbr = models.CharField(max_length=5)

    def __unicode__(self):
        return self.name

    def __str__(self):
        return self.name
  1. 您可以计算selling_price 的值以及块if request.method == 'POST' 中的任何其他计算值。

例子:

def uploadphoto(request):

    context = RequestContext(request)
    context_dict = {}

    if request.method == 'POST':

        form = ImagesForm(request.POST,request.FILES)
        #- Calculate value(s) here -#

        if form.is_valid():

            image = form.save(commit=False)
            image.save()`
  1. 请参阅this post here 了解如何使用单选按钮
  2. 您可以在与上述 #2 相同的位置执行此操作

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2013-07-17
  • 2021-09-29
  • 2012-01-11
  • 2017-05-23
  • 2021-12-18
  • 1970-01-01
相关资源
最近更新 更多