Hi!
Maybe I did something wrong when trying to program with Django in my first
thread here. Maybe I did the relationship the wrong way, maybe the docs are
containing the wrong words because of my poor database knowledge. But now I
came quite far (and hopefully someone can use that code below as example
for better understanding of Django) :-)
models.py (don't wonder why multiple colors are allowed):
from django.db import models
# Create your models here.
# class NameManager(models.Manager):
# def get_by_natural_key(self, name):
# return self.get(name=name)
class FactoryName(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return self.name
class Option(models.Model):
name = models.CharField(max_length=100, unique=True)
factory = models.ForeignKey(FactoryName, on_delete=models.CASCADE)
def __str__(self):
return self.name
class AbstractOptionPackage(models.Model):
name = models.CharField(max_length=100, unique=True)
description = models.TextField()
options = models.ManyToManyField(Option)
class Meta:
abstract = True
def __str__(self):
return self.name
class InteriorPackage(AbstractOptionPackage):
def __str__(self):
return self.name
class ExteriorColor(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return self.name
class Export(models.Model):
name = models.CharField(max_length=100, unique=True)
exterior_colors = models.ManyToManyField(ExteriorColor)
interior_package = models.ForeignKey(InteriorPackage, on_delete=models.
CASCADE)
def __str__(self):
return self.name
Now I would like to create a YAML file which looks roughly like this (it
will be processed in other software, "# ..." are just comments here in this
posting):
Filename: {{Export.name}}.yaml # I think I already found "open(...)"
example code also for serialization.
{{Factory[0].name}}: # Name of first factory
- {{ options[0] from any class derived from AbstractOptionPackage where
Option.factory = Factory[0].name }}
- {{ options[1] from any class derived from AbstractOptionPackage where
Option.factory = Factory[0].name }}
- [...]
{{Factory[1].name}}: # Name of second factory
- {{ options[0] from any class derived from AbstractOptionPackage where
Option.factory = Factory[1].name }}
- {{ options[1] from any class derived from AbstractOptionPackage where
Option.factory = Factory[1].name }}
- [...]
Colors:
{{ Export.exterior_colors }}:
- selected_exterior_colors[0]
- selected_exterior_colors[1]
- [...]
# to be extended with interior_colors.
or as example (should be quite valid YAML):
Filename: vehicle_model_A.yaml
Factory_A:
- basic_air_conditioning
- more_chrome
Factory_B:
- leather_seats
- best_radio
Colors:
exterior_colors :
- green
- yellow
I can already create some sort of YAML file for download via browser
(PyYAML installed :-)):
admin.py
from django.contrib import admin
from django.http import HttpResponse
from django.core import serializers
# Register your models here.
from .models import Export, FactoryName, Option, InteriorPackage,
ExteriorColor
# admin.site.register(Export)
admin.site.register(FactoryName)
admin.site.register(Option)
admin.site.register(InteriorPackage)
admin.site.register(ExteriorColor)
def export_all_as_yaml(modeladmin, request, queryset):
response = HttpResponse(content_type="application/yaml")
for object in Export.objects.all():
autobuild_binaries = object.filter(AdditionalBinariesGroup)
serializers.serialize("yaml", to_export, stream=response)
return response
class ExportFunction(admin.ModelAdmin):
def exterior_colors_list(self, obj):
return "\n".join([o.name for o in obj.exterior_colors.all()])
list_display = [
'name',
'exterior_colors_list',
'interior_package',
]
ordering = ['name']
actions = [export_all_as_yaml]
admin.site.register(Export, ExportFunction)
But now there're problems. I searched much on the internet but somehow it
didn't work.
1. Couldn't manage to create the queryset/filter. Always error messages
that this and that doesn't exist.
2. When there's a database relationship, only the id of the entry/entries
is shown but not the actual name. I tryed that models.Manager class thing
but it didn't work somehow (still ids). Of course there were more code
lines concerning this than shown here.
3. "Wrong" YAML format ([0, 1, 2, [...] ...]. That block style would be
better for usage with diff etc. There seems to be a PyYAML option but I
can't use that in Django without more complicated changes?! Maybe a
specially created export function is necesseray? (no re-import into the
Django app necessary)
4. I always want to export all Export entries. But Django avoids calling
the function if not at least one entry is selected. To add something like
the "add ..." button seems to be more complicated with a custom HTML file?
Currently it works for me as it is. So it's not that important.
Thanks!
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/193c7ea3-1d5c-4cf9-8120-683e1efc7d30%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.