【问题标题】:multiple foreign keys to the same table but to different columns fetches models.object同一个表但不同列的多个外键获取models.object
【发布时间】:2019-02-26 18:39:38
【问题描述】:

我有两个模型,分别是卡车和订单,它们有关系。

from django.db import models
from django.contrib.auth.models import User

class Truck (models.Model):

        truck_number = models.CharField(max_length=200);
        condition = models.CharField(max_length=20);
        insurance = models.CharField(max_length=20);
        gps_tracking = models.CharField(max_length=20);
        owner_name = models.CharField(max_length=20);
        id_number = models.IntegerField();
        telephone_number=models.IntegerField();
        driver_name=models.CharField(max_length=30, default=None);
        driver_id_number=models.IntegerField();
        driver_phone_number=models.IntegerField();
        driving_license=models.CharField(max_length=20);
        good_conduct=models.CharField(max_length=30);
        def __str__(self):
            truck_number = self.truck_number
            return truck_number



class Order(models.Model):

    truck_number= models.Foreignkey(Truck,related_name='relation_truck')
    date= models.DateField()
    product=models.CharField(max_length=30)
    depot = models.CharField(max_length=10)
    volume = models.CharField(max_length=30, blank=True)
    volume_delivered = models.CharField(max_length=30, blank=True)
    driver_name=models.ForeignKey(Truck, max_length=30,default=None)
    driver_id_number=models.ForeignKey(Truck, related_name='relation_id')
    driver_phone_number=models.ForeignKey(Truck, related_name='relation_tel')
    order_status = models.CharField(max_length=50, blank=True)
    def __str__(self):
        truck_number = self.truck_number
        return truck_number

所有具有外键的字段都在获取整个对象 Truck 但不是外键的特定值。就像我想要 truck_number 以便仅从表 Truck 而不是整个 Truck 对象中获取 truck_number 一样。 如何获取外键值而不是整个对象。

【问题讨论】:

标签: django view model querying


【解决方案1】:

根据您的评论,您需要以下内容:

Truck.objects.values_list('id', 'truck_number', 'driver_name', 'driver_id_number', 'driver_phone_number')

【讨论】:

  • 我将把它放在视图或管理员的哪里。因为当我想下订单时,下订单的形式是 ModelForm,我把它放在 django admin 中。在填写订单时,我希望获得卡车编号的下拉列表,以包含卡车型号中的所有卡车编号,也与其他字段相同
【解决方案2】:

我设法做到了,正如 webbyfox 所说:

class OrderAdmin(admin.ModelAdmin):

    fields = ('truck_number','date','product','depot','driver_name','driver_id_number','driver_phone_number')
    form = OrderForm
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "truck_number":
            kwargs["queryset"] = Truck.objects.values_list( 'truck_number', flat=True)
        elif db_field.name == "driver_name":
            kwargs["queryset"] = Truck.objects.values_list( 'driver_name', flat=True)
        elif db_field.name == "driver_id_number":
            kwargs["queryset"] = Truck.objects.values_list( 'driver_id_number', flat=True)
        elif db_field.name == "driver_phone_number":
            kwargs["queryset"] = Truck.objects.values_list( 'driver_phone_number', flat=True)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

admin.site.register(Order, OrderAdmin)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2012-05-28
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多