0

我正在尝试使用父对象获取子对象/字段值。父级是 a 中的一个变量for loop,我似乎无法将它交给custom tag.

#custom_tags.py
@register.simple_tag()
def assigned_to(sample):
    #sample=sample.pk
    return Lab_Request.objects.filter(sample=sample).first().lab.lab_name

@register.filter()
def assigned_too(sample):
    #sample=sample.pk
    return Lab_Request.objects.filter(sample=sample).first().lab.lab_name
#sample.html
{% for sample in samples %}

                {% static sample.0|assigned_too %}

                {% if user.profile.employee.pk == sample.inspector.employee.pk or perms.ics.view_sample %}

                                    <tr>
                                        <td class="column1">{{ sample.sample_date }}</td>
                                        <td class="column2">{{ sample.status|sample_status_options }}</td>
                                        <td class="column3"><a href="#">{{ sample.sample_number }}</a></td>
                                        <td class="column4"><a href="#">{{ sample.order.customer.customer_name }}</a></td>
                                        <td class="column5"><a href="#">{{ sample.lab_request.placeholder_to_be_replaced }}{{ sample.lab_request.lab.lab_name }}{{ sample.inspection_request.inspector.employee.employee_first_name }}</a></td>
                                        <td class="column6">{{ sample.date_modified|date:'M. d, Y'  }}</td>
                                    </tr>
                {% endif %}
            {% endfor %}

{% static sample|assigned_too %}是我正在努力的部分。我还尝试编写一个函数并将其称为{% assigned_to {{ sample }} %}. 如果我使用它确实有效,{% static 1|assigned_too %}但它不会像它需要的那样迭代我的循环。我不确定我是否以这种最复杂的方式进行操作。我只想要来自父母的孩子的信息,例如{{ sample.lab_request.lab.lab_name }}哪里sample是父母对象并且lab_request是孩子模型。

编辑:

#views.py
class SampleHomeView(ListView):
    model = Sample
    samples = Sample.objects.all
    context_object_name = 'samples'
    template_name = 'ics/sample.html'
    ordering = ['-sample_date']
    paginate_by = 10
#urls.py
path('sample/', SampleHomeView.as_view(), name='sample-home'),
#models.py

class Lab_Request(models.Model):
    #Add stuff here
    placeholder_to_be_replaced = models.CharField(max_length=1)
    lab = models.ForeignKey(Lab, on_delete=models.CASCADE, null=True, blank=True)
    sample = models.ForeignKey(Sample, on_delete=models.CASCADE)

class Sample(models.Model):

    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
    status = models.CharField(max_length=2, choices=SAMPLE_STATUS_OPTIONS, default="01")

class Order(models.Model):

    order_number = models.CharField(max_length=19, unique=True, editable=False, default=get_order_number)
    status = models.CharField(max_length=2, choices=ORDER_STATUS_OPTIONS)
    specification = models.ForeignKey(Specification, on_delete=models.CASCADE, null=True, blank=True) #Needs work to determine which spec is appropriate
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

class Lab(models.Model):

    status = models.CharField(max_length=2, choices=STATUS_OPTIONS)
    lab_name = models.TextField(max_length=100, unique=True)
4

1 回答 1

0

好的,我想通了。我需要把孩子叫给父母,这与我做的有点不同。我需要使用{{ sample.lab_request_set.all.0.lab }}而不是{{ sample.lab_request.lab }}

对于将来需要此功能的任何人,如果您未在 ForeignKey 中设置相关名称,那么它将parent_model_name.child_model_name_set.all为您提供一个查询集,然后您可以迭代或仅选择第一个,就像我.0在末尾所做的那样的.all。这适用于模板。如果您在 python 文件中需要它,那么您将调用该函数parent_model_name.child_model_name_set.all()

于 2021-08-13T21:14:44.920 回答