Невозможно выбрать строку из моделей Django для вывода их в третью модель - PullRequest
0 голосов
/ 06 июня 2018

У меня есть две модели Django.Каждая модель имеет n объектов (количество строк в базе данных).Я хочу выбрать объект (строку) из модели 1 и другой объект из модели 2. Я хочу использовать поля выбранных объектов для создания объекта в модели 3 с использованием действий или иным образом.Пожалуйста, помогите мне.

Мои admin.py

from django.contrib import admin
from .models import ( FirstMiningMaterial, ProcessFirstStage, 
                     SecondStageMaterials)


def calculate_second_stage_inputs(modeladmin, request, queryset):
    items_list = FirstMiningMaterial.objects.all()
    processing_list = ProcessFirstStage.objects.all()
    for obj in items_list:
        cost1 = obj.iron
        cost2 = obj.rods
        cost3 = obj.petrol
        cost4 = obj.diesel
        cost5 = obj.computers

    for obj in processing_list:
        cost1 += obj.iron_processing_cost
        cost2 += obj.rods_processing_cost
        cost3 += obj.petrol_processing_cost
        cost4 += obj.diesel_proessing_ost
        cost5 += obj.computing_cost

    queryset.update(iron_current_cost=cost1)
    queryset.update(rods_current_cost=cost2)
    queryset.update(petrol_current_cost=cost3)
    queryset.update(diesel_current_cost=cost4)
    queryset.update(computing_current_cost=cost5)

class AdminFirstMiningMaterial(admin.ModelAdmin):
    list_display = ('iron', 'rods', 'petrol', 'diesel', 'computers')
    list_display_links = ['iron', 'rods']
    actions = None
admin.site.register(FirstMiningMaterial, AdminFirstMiningMaterial)


class AdminProcessFirstStage(admin.ModelAdmin):
    list_display = ('iron_processing_cost',
                    'rods_processing_cost',
                    'petrol_processing_cost',
                    'diesel_proessing_ost',
                    'computing_cost')
    actions = None
admin.site.register(ProcessFirstStage, AdminProcessFirstStage)


class  AdminSecondStageMaterils(admin.ModelAdmin):
    list_display = ('iron_current_cost',
                    'rods_current_cost',
                    'petrol_current_cost',
                    'diesel_current_cost',
                    'computing_current_cost')
    actions = [calculate_second_stage_inputs]
admin.site.register(SecondStageMaterials, AdminSecondStageMaterils)

и мои models.py из django.db, импортирующие модели

# Create your models here.
class FirstMiningMaterial(models.Model):
    iron      = models.IntegerField()
    rods      = models.IntegerField()
    petrol    = models.IntegerField()
    diesel    = models.IntegerField()
    computers = models.IntegerField()


class ProcessFirstStage(models.Model):
    first_mining           = models.ForeignKey(FirstMiningMaterial, 
  on_delete=models.CASCADE)
    iron_processing_cost   = models.IntegerField()
    rods_processing_cost   = models.IntegerField()
    petrol_processing_cost = models.IntegerField()
    diesel_proessing_ost   = models.IntegerField()
    computing_cost         = models.IntegerField()


class SecondStageMaterials(models.Model):

    second_stage     = models.ForeignKey(ProcessFirstStage, 
     on_delete=models.CASCADE, default=0)
    iron_current_cost = models.IntegerField(default=0)
    rods_current_cost = models.IntegerField(default=0)
    petrol_current_cost = models.IntegerField(default=0)
    diesel_current_cost = models.IntegerField(default=0)
    computing_current_cost = models.IntegerField(default=0)

STATUS_CHOICES = (
    ('d', 'Draft'),
    ('p', 'Published'),
    ('w', 'Withdrawn'),
)

class Article(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    status = models.CharField(max_length=1, choices=STATUS_CHOICES)

    def __str__(self):
        return self.title
...