//App ITEMS APP(1)
class ItemsDetail(models.Model):
name = models.CharField(max_length=100,unique=True)
sellPrice = models.FloatField()
costPrice = models.FloatField()
quantity = models.IntegerField()
//App ORDERS (APP 2)
class Order(models.Model):
name = models.CharField(max_length=100)
item = models.ForeignKey(
ItemsDetail,
on_delete=models.CASCADE,
to_field='name',
blank=True,
)
price = models.FloatField()
现在,当用户在管理界面中从下拉列表中选择Order.item
时,我希望Order.price
的值为ItemsDetail.sellPrice
admin interface of Orders. Want to generate value for price according to item selected
答案 0 :(得分:0)
您别无选择。
首要选择-只需在模型中更改__str__
。
喜欢这个。
class ItemsDetail(models.Model):
name = models.CharField(max_length=100,unique=True)
sellPrice = models.FloatField()
costPrice = models.FloatField()
quantity = models.IntegerField()
def __str__(self):
return self.sellPrice
但是,如果您想将__str__
用于其他字段,则无法使用此方法。
第二,您可以覆盖formfield_for_foreignkey
本身。
class ItemsChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "Item: {}".format(obj.name)
class YourOrderAdmin(admin.ModelAdmin):
...
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'item':
return ItemsChoiceField(queryset=ItemsDetail.objects.all())
return super().formfield_for_foreignkey(db_field, request, **kwargs)
有关更多详细信息,请检查django admin cookbook
答案 1 :(得分:0)
您好,您必须重写django管理模板,方法是在模板内部创建admin文件夹,然后在模型名称文件夹中创建可以创建change_form.html的文件夹。另外,您必须编写有关值更改的javascript代码
{% block admin_change_form_document_ready %}
<script type="text/javascript">
(function($) {
$(document).ready(function() {
$('.add-another').click(function(e) {
//set the value manually.
});
})(django.jQuery);
</script>
{%endblock%}