【问题标题】:How to refer a column that matches a foreign key in another table in Django?如何在Django的另一个表中引用与外键匹配的列?
【发布时间】:2017-05-05 04:24:50
【问题描述】:

我对 Django 很陌生。我遇到了一个问题,我需要从另一个表中引用一个既不是主键也不是唯一值的列。这是我的代码:

class Assignment(models.Model):
    assignment_id = models.CharField(primary_key=True, max_length=11)
    investor_id = models.ForeignKey('Investor', to_field='investor_id', models.DO_NOTHING)
    issuer_id = models.ForeignKey('Issuer', to_field='issuer_id', models.DO_NOTHING)
    investor_risk_attitude = models.ForeignKey('Investor', to_field='investor_risk_attitude', models.Do_NOTHING)
    interest_rate = models.FloatField(blank=True, null=True)
    tranche = models.CharField(max_length=20, blank=True, null=True)

    def get_absolute_url(self):
        return reverse ('assignment:index')

    class Meta:
        managed = False
        db_table = 'assignment'

    def __str__(self):
        return self.assignment_id


class Investor(models.Model):
    investor_id = models.CharField(primary_key=True, max_length=11)
    investor_name = models.CharField(max_length=45, blank=True, null=True)
    investor_risk_attitude = models.CharField(max_length=45, blank=True, null=True,db_index=True)

    def get_absolute_url(self):
        return reverse ('investor:index')

    class Meta:
        managed = False
        db_table = 'investor'

    def __str__(self):
        return self.investor_id

    class Issuer(models.Model):
    issuer_id = models.CharField(primary_key=True, max_length=11)
    issuer_name = models.CharField(max_length=45, blank=True, null=True)
    issuer_category = models.CharField(max_length=45, blank=True, null=True)
    total_pool_amount = models.FloatField(blank=True, null=True)
    login_id = models.CharField(max_length=45, blank=True, null=True)
    login_password = models.CharField(max_length=45, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'issuer'

    def __str__(self):
        return self.issuer_id

在Assignment表中,我需要从Investor表中引用investor_risk_attitude,我已经做了索引,但它不是唯一值。因为investor_id也是Assignment表的外键,所以这里需要risk_attitude和它的investor_id匹配。

我还有一个表格,允许用户在表格中添加新的Assignment记录,代码如下。

class AddAssignment(CreateView):
model = Assignment
fields = ['assignment_id', 'investor', 'issuer', 'investor_risk_attitude', 'interest_rate', 'tranche']

有没有什么方法可以在用户在表单的下拉菜单中选择投资者时弹出相应的 risk_attitude 来执行此操作?非常感谢?

【问题讨论】:

标签: python django django-models


【解决方案1】:

我认为您希望在投资者选择字段发生变化时从服务器获得实时响应。

您可以通过在 #id_investor_id 更改期间调用 ajax 函数来做到这一点。

在模板中

$(document).on("change", "#id_investor_id", function(){
        var value = $(this).val();
        showDetail(value);
});


function showDetail(value){ 
    if(value !== "" || value !== null){
        var url = "{% url 'get_value' %}";
        $.ajax({
            type : "GET",
            url : url,
            data: { 
                id : value
            } ,
            dataType : 'json',
            success : function(data){
                var status = data['status'];
                alert(status);
            },
        });
    }
}

在views.py中

def get_value(request):
    pk = request.GET.get('id')
    instance = Investor.objects.get(pk=pk)
    if instance:
        response_data = {
                "status" : instance.investor_risk_attitude, 
            }
    else:
        response_data = {
            "status" : "false",
            "message" : "value Error"
        }
    return HttpResponse(json.dumps(response_data), content_type='application/javascript')

在 urls.py 中

url(r'^get-value/$', views.get_value, name='get_value'),

如果您想保存同一模型中的两个字段,请将related_name="investor_risk_atitude_%(class)s_objects" 添加到您的字段中。

【讨论】:

  • 那很好,但我还需要在表中列出属性,现在 django 不允许我引用该值。
  • 看看这个。
  • 请您将答案标记为正确。谢谢
猜你喜欢
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
相关资源
最近更新 更多