Автоматическое создание значения для поля модели из другого поля модели приложения Django - PullRequest
0 голосов
/ 12 октября 2018
//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

интерфейс администратора заказов.Хотите создать значение для цены в соответствии с выбранным элементом

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Привет, вы должны переопределить шаблон администратора django, вы делаете, создавая папку администратора внутри шаблона, папку с названием модели в той стороне, в которой вы можете создать 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%}

0 голосов
/ 12 октября 2018

У вас есть несколько вариантов.

Первый и простой выбор - просто измените __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

Но вы можете 't используйте этот подход, если вы хотите __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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...