首页 > 解决方案 > 如何设置表单的下拉选项并添加图片,而不是使用 Django 的通用列表

问题描述

我想在尝试提交表单时拥有用户的个人资料图片和数据库中的值。目前,表单只有一个下拉列表,列出了数据库中所有对象的 id,例如:


对象 (1) 对象 (2) 对象 (3) 对象 (4) 对象 (5)

我希望下拉列表具有:

用户名,个人资料图片(他们来自静态文件的实际图像),对象 1 的字符串(数据库中的实际内容) 用户名,个人资料图片(他们来自静态文件的实际图像),对象 2 的字符串(数据库中的实际内容)用户名,个人资料图片(他们来自静态文件的实际图像),对象 3 的字符串(实际在数据库中的内容)用户名,个人资料图片(他们来自静态文件的实际图片),对象 4 的字符串(实际在数据库中的内容)用户名,个人资料图片(他们的实际图片来自静态文件),对象 5 的字符串(数据库中的实际内容)

这是一些代码,我愿意接受任何 python 解决方案(crispy/widget/etc.)

我的表格.py

from django.contrib.auth import get_user_model
from .models import Observation, Data, Hypothesis, Experiment, Comment

User = get_user_model()

class SubmitObservation(ModelForm):
    description = forms.CharField(widget=forms.Textarea, label='Submit an Observation')
    class Meta:
        model = Observation
        fields = ('description',)
        exclude = ('user', 'status', 'activate_date', 'deactivate_date')
        
        #observation = forms.CharField(label='Observation', max_length=250)

class SubmitData(ModelForm):
    data_description = forms.CharField(widget=forms.Textarea, label='Data')
    class Meta:
        model = Data
        fields = ('data_description',)

class SubmitHypothesis(ModelForm):
    hypo_description = forms.CharField(widget=forms.Textarea, label='Hypothesis')
    class Meta:
        model = Hypothesis
        fields = ('hypo_description',)

class SubmitExperiment(ModelForm):
    exp_description = forms.CharField(widget=forms.Textarea, label='Experiment')
    class Meta:
        model = Experiment
        fields = ('exp_description',)

class SubmitSocialMethod(ModelForm):
    conclusion = forms.CharField(widget=forms.Textarea, label='', required=False)
    class Meta:
        model = Comment
        fields = ('data', 'hypothesis', 'experiment', 'conclusion',)

我的模型.py

from django.db import models
from django_extensions.db.models import TimeStampedModel, ActivatorModel
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth import get_user_model
User = get_user_model()

class Observation(TimeStampedModel, ActivatorModel):
    user = models.ForeignKey(
        "user.User", verbose_name=_("User"),
        related_name="observations",
        on_delete=models.CASCADE
    )
    description = models.CharField(_("Description"), max_length=250)


class Data(TimeStampedModel, ActivatorModel):
    user = models.ForeignKey(
        "user.User", verbose_name=_("User"),
        on_delete=models.SET_NULL,
        blank=True, null=True
    )
    data_description = models.CharField(_("Data"), max_length=250, null=False, blank=False)


class Experiment(TimeStampedModel, ActivatorModel):
    user = models.ForeignKey(
        "user.User", verbose_name=_("User"),
        on_delete=models.SET_NULL,
        blank=True, null=True
    )
    exp_description = models.CharField(_("Experiment"), max_length=250, null=False, blank=False)


class Hypothesis(TimeStampedModel, ActivatorModel):
    user = models.ForeignKey(
        "user.User", verbose_name=_("User"),
        on_delete=models.SET_NULL,
        blank=True, null=True
    )
    hypo_description = models.CharField(_("Hypothesis"), max_length=250, null=False, blank=False)


class Comment(TimeStampedModel, ActivatorModel):
    user = models.ForeignKey(
        "user.User", verbose_name=_("User"),
        related_name="comments",
        on_delete=models.CASCADE
    )
    observation = models.ForeignKey(
        "newsfeed.Observation", verbose_name=_("Observation"),
        on_delete=models.CASCADE
    )
    data = models.ForeignKey(
        "newsfeed.Data", verbose_name=_("Data"),
        on_delete=models.SET_NULL, null=True, blank=True
    )
    experiment = models.ForeignKey(
        "newsfeed.Experiment", verbose_name=_("Experiment"),
        on_delete=models.SET_NULL, null=True, blank=True
    )
    hypothesis = models.ForeignKey(
        "newsfeed.Hypothesis", verbose_name=_("Hypothesis"),
        on_delete=models.SET_NULL, null=True, blank=True
    )
    conclusion = models.CharField(_("Conclusion"), max_length=250, null=True, blank=True)

标签: python-3.xdjangodjango-forms

解决方案


推荐阅读