【问题标题】:Select a model instance from HTML form on Django从 Django 上的 HTML 表单中选择模型实例
【发布时间】:2020-04-17 19:28:04
【问题描述】:

我正在尝试获取我的 html 表单以允许我传递公司模型实例。到目前为止,我可以提取每个公司实例的名称,但是,我将在选项字段的值属性中添加什么以使其正确选择实例?

<option value="what to put here?">{{Company.name}}</option>

我希望通过 HTML 表单而不是 Django 表单来做到这一点,因为我使用 AJAX 制作了一个不错的小型实时更新界面。

models.py

class Company(models.Model):
    name = models.CharField(max_length=30, null=True, blank=True)
    email = models.CharField(max_length=40, null=True, blank=True)
    phone = models.CharField(max_length=15, null=True, blank=True)
    address = models.CharField(max_length=100, null=True, blank=True)
    notes = models.CharField(max_length=400, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True, blank=True)
    updated = models.DateTimeField(auto_now=True, blank=True)
    class Meta:
        ordering = ["name"]
    def __str__(self):
        return self.name



class Contact(models.Model):
    firstname = models.CharField(max_length=20, null=True, blank=True)
    lastname = models.CharField(max_length=20, null=True, blank=True)
    email = models.CharField(max_length=40, null=True, blank=True)
    phone = models.CharField(max_length=15, null=True, blank=True)
    title = models.CharField(max_length=20, null=True, blank=True)
    notes = models.CharField(max_length=400, null=True, blank=True)
    company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    class Meta:
        ordering = ["lastname"]
    def __str__(self):
        return self.firstname

views.py

class contact_manager(ListView):
    template_name = 'crm/contact_manager.html'
    context_object_name = 'contact_manager'
    queryset = Contact.objects.all()
    def get_context_data(self, **kwargs):
        context = super(contact_manager, self).get_context_data(**kwargs)
        context['contact'] = Contact.objects.all()
        context['company_list'] = Company.objects.all()
        # And so on for more models
        return context

contact_manager.html

  <div class="form-group">
    <select class="form-control" name="company" placeholder="Company">
      <option value="">Please select a company</option>
      {% for Company in company_list %}
      <option value="{{Company.name}}">{{Company.name}}</option>
      {% endfor %}
    </select>
  </div>

【问题讨论】:

    标签: django django-models django-templates django-views


    【解决方案1】:

    如果您正在寻找每个选项的唯一标识符,该标识符链接到后端的模型实例,这就是 ID 字段的用途 (Company.id):

    <option value="{{ Company.id }}">{{Company.name}}</option>
    

    然后在后端您可以使用发布的 id 检索模型:

    Company.get(id=posted_id)
    

    注意:id 默认情况下作为主键添加到您的模型中,并且是一个自动递增的整数。

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2018-09-15
      • 2012-11-23
      • 2012-05-02
      相关资源
      最近更新 更多