Django - я хочу хранить данные 3 моделей в одной базе данных в phpmyadmin (MySQL)

Я создал 3 модели (страна, штат и город) и вводимые данные сохраняются в 3 разных таблицах. Я хочу сохранить эти данные в одной таблице со следующими колонками:

Схема столбцов базы данных


Models.py

class Country(models.Model):
    id = models.AutoField(primary_key=True)
    parent_id = models.IntegerField(null=False)
    name = models.CharField(null=False, max_length=255)
    status = models.CharField(null= True, choices=Status_Choices, max_length=11, default='--Select Status--') 
    added_by = models.IntegerField()
    updated_by = models.IntegerField()
    created_on = models.CharField(default=get_current_datetime_str , max_length=255)
    updated_on = models.CharField(default=get_current_datetime_str, max_length=255)
    
    def __str__(self):
        return self.name

class State(models.Model):
    parent = models.ForeignKey(Country, on_delete=models.CASCADE)
    name = models.CharField(null=False, max_length=255)

    def __str__(self):
        return self.name

class City(models.Model):
    Country = models.ForeignKey(Country, on_delete=models.CASCADE)
    state = models.ForeignKey(State, on_delete=models.CASCADE)
    name = models.CharField(null=False, max_length=255)

    def __str__(self):
        return self.name

admin.py

from django.contrib import admin
from location.models import Country, State, City
from django import forms
from django.contrib import admin


class CountryAdmin(admin.ModelAdmin):
    exclude = ('parent_id', 'created_on', 'updated_on', 'added_by', 'updated_by')

    def save_model(self, request, obj, form, change):
        user = request.user

        # Check if the user is authenticated (i.e. logged in)
        if user.is_authenticated:
            # If the user is authenticated, set the added_by field to the user's ID
            obj.added_by = user.id
        else:
            # The user is not authenticated, do something else
            ...


        if change:
            obj.updated_by = user.id


        # Save the model instance
        super().save_model(request, obj, form, change)
        
admin.site.register(Country, CountryAdmin)


@admin.register(State)
class StateAdmin(admin.ModelAdmin):
    # Define the fields to be displayed in the list view of states
    list_display = ('name', 'parent')

    # Set the heading for the states page in the Django admin interface
    verbose_name_plural = 'Locations'


@admin.register(City)
class StateAdmin(admin.ModelAdmin):
    # Define the fields to be displayed in the list view of states
    list_display = ('name', 'state')

    # Set the heading for the states page in the Django admin interface
    verbose_name_plural = 'Locations'

forms.py

from django import forms
from .models import Country, State, City

class CountryForm(forms.ModelForm):
    class Meta:
        model = Country
        fields = ['name']

    def clean_name(self):
        name = self.cleaned_data['name']
        if name == '--Select Country--':
            raise forms.ValidationError("Please select a valid country")
        return name

class StateForm(forms.ModelForm):
    class Meta:
        model = State
        fields = ['name', 'parent']

class CityForm(forms.ModelForm):
    class Meta:
        model = City
        fields = ['name', 'state']

Я пытался объединить их, но для этого мне нужно добавить дополнительный столбец для города и штата. Я хочу, чтобы все хранилось под именем, соответствующим их родительскому идентификатору (см. схему базы данных).

Пожалуйста, помогите мне, это срочно.

Вернуться на верх